1

私は魔方陣プログラムを書きましたが、うまくいきました。

しかし、私は自分の仕事の出力をこれに逆にする必要があります: (出力を見てください):

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

ここに画像の説明を入力

私の望ましい出力は次のとおりです。

ここに画像の説明を入力

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

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 
        }
        magic[row][col] = i;
    }

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


}

みんな、コードをデバッグするのを手伝ってください。必要なのは、コードを完全に傷つけない小さな変更だけです。LOOP に何か変更点があると思いますが、見つかりませんでした。

多分数学の公式..

4

2 に答える 2

2

逆に印刷する必要があります-最後から始めます。以下に示すように、ループ トラバーサル条件を変更します。

// print results
for (int i = num-1; i >=0; i--) {
    for (int j = num-1; j >=0; j--) {
        System.out.print(magic[i][j] + "\t");
    }
    System.out.println();
}

またはループ変数をそのまま使用する

    for (int i = 0; i < num; i++) {
        for (int j = 0; j < num; j++) {
            System.out.print(magic[num-i-1][num-j-1] + "\t");
        }
        System.out.println();
    }
于 2014-12-11T05:18:40.887 に答える
0

最初に行をゼロに設定

  int row = 0;// instead of num - 1;
  ...

次に、col の更新方法をさらに下に変更します

for (int i = 2; i <= num * num; i++) {
    int newColumn = ((col - 1)+num) % num;
    int newRow = ((row - 1)+num) % num;
    if (magic[newRow][newColumn] == 0) {
        row = newRow;
        col = newColumn;
    } else {
        row = (row + 1) % num;
    }
于 2014-12-11T05:35:39.777 に答える