Сформировать квадратную матрицу порядка N по заданному образцу

Даны числа а1, а2, … аn. Сформировать квадратную матрицу порядка n по заданному образцу:введите сюда описание изображения

Вот примерный код, что дальше делать не знаю.

int main() {

    setlocale(LC_ALL, "Russian");

    int n;
    cout << "Введите порядок квадратной матрицы: ";
    cin >> n;

    int** arr = new int* [n];
    for (int i = 0; i < n; i++)
        arr[i] = new int[n];

    cout << "Введите а1, а2, ... , a" << n << " : ";

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cin >> arr[i][j];
        }
    }

    cout << "Введенный массив: " << endl;
    for (int i = 0; i < n; i++) 
    {
        for (int j = 0; j < n; j++)
        {
            cout << setw(4) << arr[i][j];
        }
        cout << endl;
    }

    system("pause");
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Все очень просто. Если обозначить матрицу как b, то

b[i][j] = a[(i+j)%n+1]

Если, конечно, нумерация b - как принято в C/C++ - с нуля, а вот a - как в условии - с 1.

Если и a нумеровать с нуля - просто не нужно +1.

Все!

Код сами напишете?

Можно просто ввести все ai в первую строку матрицы, а остальные строки получить сдвигом влево.

Типа

for(int j = 0; j < n; ++j)
    b[i][j] = b[i-1][(j+1)%n];

Вот, по просьбам трудящихся весь код ввода:

for (int i = 0; i < n; i++)
    cin >> arr[0][i];

for (int i = 1; i < n; i++)
    for(int j = 0; j < n; ++j)
        arr[i][j] = arr[i-1][(j+1)%n];
→ Ссылка