Магический квадрат предпочтительный выход

У меня есть задание о ВОЛШЕБНОЙ ПЛОЩАДИ:

Но мне нужно переписать это.

Это мой код на данный момент:

    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, Примените ту же логику к столбцам, чтобы получить выходные данные, совпадающие с выходными данными цели.

Другие вопросы по тегам