Магический квадрат предпочтительный выход
У меня есть задание о ВОЛШЕБНОЙ ПЛОЩАДИ:
Но мне нужно переписать это.
Это мой код на данный момент:
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, затем шаблон вверх, затем влево.
1 ответ
Если начальный номер должен быть верхним элементом - единственное условие, которое вам не хватает, то итерация цикла строки результата печати в обратном порядке решит проблему. Так что вместо печати строк по порядку 0, 1, 2, ..., n
попробуйте напечатать строки по порядку n, n-1, n-2, ..., 1, 0
, Примените ту же логику к столбцам, чтобы получить выходные данные, совпадающие с выходными данными цели.