0

私は spirla マトリックスを作成するコードを持っていますが、このマトリックスを翻訳して書きたいと思います。私の出力は次のようになります:

1   2   3   
10  11  4   
9   12  5   
8   7   6

しかし、私はこれが欲しいので、これは間違っています:

4 5 6
3 12 7
2 11 8
1 10 9

それは私のコードです:

public void generateMatrixFile(int n , int m){
    //n row, m column
     int A[][]=new int[n][m];
        int k=1, c1=0, c2=m-1, r1=0, r2=n-1;

        while(k<=n*m) {
                for(int i=c1;i<=c2;i++) {
                    A[r1][i]=k++;
                }
                for(int j=r1+1;j<=r2;j++) {
                    A[j][c2]=k++;
                }
                for(int i=c2-1;i>=c1;i--) {
                    A[r2][i]=k++;
                }
                for(int j=r2-1;j>=r1+1;j--) {
                    A[j][c1]=k++;
                }
             c1++;
             c2--;
             r1++;
             r2--;
        }
        System.out.println("The Matrix is:");
        for(int i=0;i<n;i++) {
                for(int j=0;j<m;j++) {
                        System.out.print(A[i][j]+ "\t");
                }
                System.out.println();
        }
    }
4

2 に答える 2

1

この問題を修正する方法は次のとおりです。

  • マトリックスの塗りつぶし方法を変更する、または
  • マトリックスの印刷方法を変更する、または
  • 上記の 2 つのアプローチを組み合わせてください。

目的の出力は、行列の変換とその次元の反転の組み合わせであるため、組み合わせアプローチが必要です。 と を切り替えnm最初のループの反復順序を逆にして、目的の出力を取得します。また、マークkに到達したら停止するようにネストされたループを変更する必要があります。n*m

public static void generateMatrixFile(int n , int m) {
    int A[][] = new int[m][n]; // Switched m and n
    int k=1, c1=0, c2=n-1, r1=0, r2=m-1; // Switched m and n
    while (k<=n*m) {
        for (int i=c1;i<=c2 && k<=n*m;i++) {
            A[r1][i]=k++;
        }
        for(int j=r1+1;j<=r2 && k<=n*m;j++) {
            A[j][c2]=k++;
        }
        for(int i=c2-1;i>=c1 && k<=n*m;i--) {
            A[r2][i]=k++;
        }
        for(int j=r2-1;j>=r1+1 && k<=n*m;j--) {
            A[j][c1]=k++;
        }
        c1++;
        c2--;
        r1++;
        r2--;
    }
    System.out.println("The Matrix is:");
    for (int i=n-1;i>=0;i--) {
        for(int j=0 ; j < m ; j++) {
            System.out.print(A[j][i]+ "\t");
        }
        System.out.println();
    }
}

デモ。

于 2015-12-29T14:07:11.950 に答える
0

ループの順序を変更し、それに応じて変数を調整するだけです。

    public static void generateMatrixFile(int n , int m){
//n row, m column
 int A[][]=new int[n][m];
    int k=1, c1=0, c2=m-1, r1=0, r2=n-1;

    while(k<=n*m)
        {
            for(int j=r2;j>=r1;j--)
            {
                A[j][c1]=k++;
            }
            for(int i=c1+1;i<=c2;i++)
            {
                A[r1][i]=k++;
            }

            for(int j=r1+1;j<=r2;j++)
            {
                A[j][c2]=k++;
            }

            for(int i=c2-1;i>=c1+1;i--)
            {
                A[r2][i]=k++;
            }



         c1++;
         c2--;
         r1++;
         r2--;

        }


    System.out.println("The Matrix is:");
    for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
                {
                    System.out.print(A[i][j]+ "\t");
                }
         System.out.println();
        }
}

それが役立つことを願っています。

于 2015-12-29T14:17:55.450 に答える