Cod sursa(job #1824591)

Utilizator v_silviuVlasceanu Silviu v_silviu Data 8 decembrie 2016 00:45:52
Problema Cifra Scor 70
Compilator java Status done
Runda Arhiva de probleme Marime 2.69 kb
import java.io.*;
import java.util.Scanner;

/**
 * Created by vlasceanusilviu on 12/8/16.
 */
class Main {

    private static int[][] partialSums = new int[10][10];

    public static void main(String[] args) throws IOException {

        Scanner reader = new Scanner(new FileInputStream("cifra.in"));
        BufferedWriter writer = new BufferedWriter(new FileWriter("cifra.out"));

        initPartialSums();

        int T = reader.nextInt();

        for (int j = 0; j < T; ++j) {

            String n = reader.next();

            int lastDigit = Character.getNumericValue(n.charAt(n.length() - 1));
            int preLastDigit = n.length() >= 2 ? Character.getNumericValue(n.charAt(n.length() - 2)) : 0;
            int result = 0;

            for (int i = 1; i <= 9; ++i) {

                if (i <= lastDigit) {
                    if (i == 2 || i == 3 || i == 5 || i == 7 || i == 8) {
                        result = (result + partialSums[i][preLastDigit % 2]) % 10;
                    } else if (i == 4 || i == 6) {
                        result = (result + partialSums[i][preLastDigit % 5]) % 10;
                    } else if (i == 1) {
                        result = (result + preLastDigit + 1) % 10;
                    } else {
                        result = (result + 10 - preLastDigit - 1) % 10;
                    }
                } else if (preLastDigit != 0) {
                    if (i == 2 || i == 3 || i == 5 || i == 7 || i == 8) {
                        result = (result + partialSums[i][(preLastDigit - 1) % 2]) % 10;
                    } else if (i == 4 || i == 6) {
                        result = (result + partialSums[i][(preLastDigit - 1) % 5]) % 10;
                    } else if (i == 1) {
                        result = (result + preLastDigit) % 10;
                    } else {
                        result = (result + 10 - preLastDigit) % 10;
                    }
                }

            }

            writer.write(String.valueOf(result) + "\n");
        }

        reader.close();
        writer.close();
    }

    private static void initPartialSums() {
        partialSums[2][0] = 4;
        partialSums[2][1] = 0;

        partialSums[3][0] = 7;
        partialSums[3][1] = 0;

        partialSums[4][0] = 6;
        partialSums[4][1] = 2;
        partialSums[4][2] = 8;
        partialSums[4][3] = 4;
        partialSums[4][4] = 0;

        partialSums[5][0] = 5;
        partialSums[5][1] = 0;

        partialSums[6][0] = 6;
        partialSums[6][1] = 2;
        partialSums[6][2] = 8;
        partialSums[6][3] = 4;
        partialSums[6][4] = 0;

        partialSums[7][0] = 3;
        partialSums[7][1] = 0;

        partialSums[8][0] = 6;
        partialSums[8][1] = 0;
    }

}