Подтвердить что ты не робот

Создание диагональной матрицы N на N с использованием базовой логики

Я хочу создать матрицу размера N на N, где N - значение константы, определенное глобально, на данный момент я просто хочу создать матрицу, где N = 6. Там, где я отстаю, я хочу сделать это по диагонали, например:

0 1 2 3 4 5
1 0 1 2 3 4
2 1 0 1 2 3
3 2 1 0 1 2
4 3 2 1 0 1
5 4 3 2 1 0

В настоящее время у меня есть этот метод:

public static void drawMatrix(){
    for (int line = 0; line < N; line++){
        for (int j = 0; j < N; j++){
            System.out.print(j + " ");
        }
        System.out.println();
    }
}

К сожалению, он способен печатать только 0 1 2 3 4 5 в каждой строке, поэтому я полагаю, что мне нужен еще один вложенный for-loop, однако я не уверен, как его настроить.

4b9b3361

Ответ 1

j - номер столбца, поэтому он будет одинаковым для всех строк. Вам нужно добавить или вычесть j из номера строки, в зависимости от номера строки, чтобы сделать "сдвиг". Поскольку результат может стать отрицательным, вам нужно добавить N и mod N:

if (j > line) {
    System.out.print((N-line+j)%N + " ");
} else {
    System.out.print((line-j+N)%N + " ");
}

Демоверсия

Вы также можете переписать его без if с использованием условного выражения:

int sign = j > line ? -1 : 1;
System.out.print((N+sign*(line-j))%N + " ");

Демоверсия

Ответ 2

Небольшое изменение в работе вашего кода

public static void drawMatrix() {
    for(int line = 0; line < N; line++) {
      for(int j = 0; j < N; j++) {
        System.out.print(Math.abs(line - j) + " ");
      }
      System.out.println();
    }
}

Ответ 3

Я бы сделал что-то вроде:

    int n=6;

    for(int row=0;row<n;row++)
    {
        for(int col = 0;col<n;col++)
        {
         System.out.print(abs(col-row) +" ");
        }
        System.out.println();
    }

Предполагая, что вы можете использовать abs(). Я надеялся, что это поможет вашей цели.

Ответ 4

Это также работает:

public static void main(String[] args) {
    int N = 6;
    int column = 0;

    for (int row = 0; row < N; row++) {
        for (column = row; column >= 0; column--) //prints till row number reaches 0
            System.out.print(column + " ");
        for (column = 1; column < N - row; column++)//from 1 to  N-row
            System.out.print(column + " ");

        System.out.println();
    }
}