Заполнение двумерного массива n*n C++

Необходимо создать двумерный массив размерностью n*n, и заполнить его значениями.Дан пример того, как этот массив будет выглядеть.

Конечный вид массива (заполнен не до конца)

Код прилагаю ниже, пока массив заполняется нулями:

#include "iostream"

using namespace std;

int main()
{
    setlocale(LC_ALL, "Rus");

    int n, sum = 0;

    cout << "Введите размерность квадратной матрицы: "; cin >> n;

    int** M = new int* [n];

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


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


    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << M[i][j] << " ";
        
            if (M[i][j] % 2 == 0)
                sum += M[i][j];
        }
        cout << endl;
    }

    cout << "Сумма четных элементов равна: " << sum;

    for (int i = 0; i < n; i++)
        delete[] M[i];

    delete[] M;
}

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

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

Ну воспользуйтесь симметрией...

for(int row = 0; row < n; ++row)
    for(int col = row; col < n; ++col)
        M[col][row] = M[row][col] = col - row + 1;

вот и все заполнение.

→ Ссылка
Автор решения: Проста Miha

Вот что мне пришло в голову, надеюсь вам это поможет

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int n, sum = 0;
    cout << "Введите размерность квадратной матрицы: ";
    cin >> n;
    int M[n][n];

    for (int i = 1; i <= n ; i++) {
        for (int j = 1; j <= n; j++) {
            int val = abs(j - i) + 1;
            M[i][j] = val;
            
            if (val % 2 == 0) sum+= val;
        }
    }
    
    for (int i = 1; i <= n ; i++) {
        for (int j = 1; j <= n; j++) {
            cout << M[i][j] << ' ';
        }
        cout << endl;
    }
    
    cout << "Сумма : " << sum;

    return 0;
}

→ Ссылка