Magic Square首选输出

时间:2014-12-10 12:10:28

标签: java magic-square

我有关于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();
    }


目前,我的程序输出是:

My Program output

我的预期/期望输出:

enter image description here

我需要的是起始编号(1)位于行x col的中上部,然后图案向上然后离开。

1 个答案:

答案 0 :(得分:0)

如果起始编号应该是上部元素是您缺少的唯一条件,则以相反的顺序迭代打印结果行循环将解决问题。因此,不是按0, 1, 2, ..., n的顺序打印行,而是尝试按n, n-1, n-2, ..., 1, 0的顺序打印行。 将相同的逻辑应用于列以使输出与目标输出相同。