落書きノート

ふと自分が気になった事を書いてます

Javaで問題を解く

ちょっと組んだのが複雑過ぎたかも…。もう少しシンプルにやれるのですが、用途が限定されるのが悩み。多分このコードも要素数をいじられたら誤作動が起きそうですけど、一応こういうふうに作りました。解法を見てまた今度やり直すかも。

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

// 問題1.7 行列の回転

class q1_7 {
    public static void main(String[] args) {
        int A[][] = {
            {1,1,2,2},
            {1,1,2,2},
            {3,3,4,4},
            {3,3,4,4}
        };
        int[][] a = new int[A.length / 2][A[0].length / 2];
        int[][] b = new int[A.length / 2][A[0].length / 2];
        int[][] c = new int[A.length / 2][A[0].length / 2];
        int[][] d = new int[A.length / 2][A[0].length / 2];
        for(int i = 0; i < A.length; i++) {
            for(int j = 0; j < A[0].length; j++) {
                System.out.print(A[i][j]);
                if(j != A[0].length - 1)
                    System.out.print(' ');
            }
            System.out.println();
        }
        // 配列4つ
        for(int i = 0, x = 0; i < A.length / 2; i++, x++) {
            for(int j = 0, y = 0; j < A[0].length / 2; j++, y++) {
                a[x][y] = A[i][j];
            }
        }
        for(int i = 0, x = 0; i < A.length / 2; i++, x++) {
            for(int j = A[0].length / 2, y = 0; j < A[0].length; j++, y++) {
                b[x][y] = A[i][j];
            }
        }
        for(int i = A.length / 2, x = 0; i < A.length; i++, x++) {
            for(int j = 0, y = 0; j < A[0].length / 2; j++, y++) {
                c[x][y] = A[i][j];
            }
        }
        for(int i = A.length / 2, x = 0; i < A.length; i++, x++) {
            for(int j = A[0].length / 2, y = 0; j < A[0].length; j++, y++) {
                d[x][y] = A[i][j];
            }
        }
        for(int i = 0, x = 0; i < A.length / 2; i++, x++) {
            for(int j = 0, y = 0; j < A[0].length / 2; j++, y++) {
                A[i][j] = c[x][y];
            }
        }
        for(int i = 0, x = 0; i < A.length / 2; i++, x++) {
            for(int j = A[0].length / 2, y = 0; j < A[0].length; j++, y++) {
                A[i][j] = a[x][y];
            }
        }
        for(int i = A.length / 2, x = 0; i < A.length; i++, x++) {
            for(int j = 0, y = 0; j < A[0].length / 2; j++, y++) {
                A[i][j] = d[x][y];
            }
        }
        for(int i = A.length / 2, x = 0; i < A.length; i++, x++) {
            for(int j = A[0].length / 2, y = 0; j < A[0].length; j++, y++) {
                A[i][j] = b[x][y];
            }
        }
        for(int i = 0; i < A.length; i++) {
            for(int j = 0; j < A[0].length; j++) {
                System.out.print(A[i][j]);
                if(j != A[0].length - 1)
                    System.out.print(' ');
            }
            System.out.println();
        }
        int B[][] = {
            {1,1,2,2},
            {1,1,2,2},
            {3,3,4,4},
            {3,3,4,4}
        };
        // 配列が二つ
        int[][] a2 = new int[A.length / 2][A[0].length];
        int[][] b2 = new int[A.length / 2][A[0].length];
        for(int i = 0, x = 0; i < A.length / 2; i++, x++) {
            for(int j = 0, y = 0; j < A[0].length; j++, y++) {
                a2[x][y] = B[i][j];
            }
        }
        for(int i = A.length / 2, x = 0; i < A.length; i++, x++) {
            for(int j = 0, y = 0; j < A[0].length; j++, y++) {
                b2[x][y] = B[i][j];
            }
        }
        for(int i = 0, x = 0; i < A.length / 2; i++, x++) {
            for(int j = A[0].length / 2, y = 0; j < A[0].length; j++, y++) {
                B[i][j] = a2[x][y];
            }
        }
        for(int i = A.length / 2, x = 0; i < A.length; i++, x++) {
            for(int j = A[0].length / 2, y = a2[0].length / 2; j < A[0].length; j++, y++) {
                B[i][j] = a2[x][y];
            }
        }
        for(int i = 0, x = 0; i < A.length / 2; i++, x++) {
            for(int j = 0, y = 0; j < A[0].length / 2; j++, y++) {
                B[i][j] = b2[x][y];
            }
        }
        for(int i = A.length / 2, x = 0; i < A.length; i++, x++) {
            for(int j = 0, y = b2[0].length / 2; j < A[0].length / 2; j++, y++) {
                B[i][j] = b2[x][y];
            }
        }
        for(int i = 0; i < B.length; i++) {
            for(int j = 0; j < B[0].length; j++) {
                System.out.print(B[i][j]);
                if(j != B[0].length - 1)
                    System.out.print(' ');
            }
            System.out.println();
        }
    }
}