0

MAGIC SQUARE に関する課題があります。

しかし、私はそれを書き直す必要があります。

これは現時点での私のコードです:

    Scanner input = new Scanner(System.in);

    System.out.print("Enter a number: ");
    int num= input.nextInt();

    //Number must be ODD and not less than or equals to one to continue 
    while((num%2==0)||(num<=1)){
        System.out.println("Enter a valid number: ");
        num= input.nextInt();
    }



    int[][] magic = new int[num][num];

    int row = num-1;
    int col = num/2;
    magic[row][col] = 1;

    for (int i = 2; i <= num*num; i++) {
        if (magic[(row + 1) % num][(col + 1) % num] == 0) {
            row = (row + 1) % num;
            col = (col + 1) % num;
        }
        else {
            row = (row - 1 + num) % num;
            // don't change col
        }
        magic[row][col] = i;
    }

    // print results
    for (int i = 0; i < num; i++) {
        for (int j = 0; j < num; j++) {
            if (magic[i][j] < 10)  System.out.print(" ");  // for alignment
            if (magic[i][j] < 100) System.out.print(" ");  // for alignment
            System.out.print(magic[i][j] + " ");
        }
        System.out.println();
    }


現在、私のプログラムの出力は次のとおりです。

マイ プログラムの出力

私の期待/望ましい出力:

ここに画像の説明を入力

私が必要とするのは、開始番号 (1) が行 x col の中央上部にあり、パターンが上にあり、左にあることです。

4

1 に答える 1

0

開始番号が上位要素でなければならない場合は、欠落している唯一の条件であり、出力結果行ループを逆の順序で繰り返すことで問題が解決します。したがって、行を順番に印刷する代わりに、行を順番0, 1, 2, ..., nに印刷してみてくださいn, n-1, n-2, ..., 1, 0。同じロジックを列に適用して、目標出力と同じ出力を取得します。

于 2014-12-10T12:13:12.620 に答える