Нулевая строка массива - часть бесконечного ряда нечетных чисел: 1,3,5,7,9,... = 2n+1 (n є [0;N])
Первая строка - тот же ряд, только n є [1;N]U{N-1}
Вторая - n є [2;N]U{N-1...N-2}
Третья - n є [3;N]U{N-1...N-3}
N-1 -я - n є [N-1;N]U{N-1...1}
N -я - n є {N}U{N-1...0}
Т.е имеем формулу 2n+1 для получения числа содержащегося в массиве и закон по которому изменяется n: [row;N]U{N-1...N-row}, где row - индекс строки.
Т.е. это "непрерывные" подмножества множества чисел {1,3,5,7,...,2N-1,2N+1,2N-1,...,5,3,1}, начинающиеся с того элемента, номер которого совпадает с номером строки и длинной N.
Ну теперь распишем все это.
// тут вставить запрос на ввод размерности массива, допустим N=5
int N = 5;
int L = 2*N-1;
a = new int[L]; // - объявление множества чисел из которых выберем те, что нам нужны
for (int i = 0; i < N; i++) { // - записываем в массив от 1 до 2N+1
a[i] = 2*i+1;
}
for (int i = N-2; i > 0; i--) { // записываем в массив от 2N-1 до 1
a[i] = 2*i+1;
}
int[][] matrixA; // - объявление искомого массива.
matrixA = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
matrixA[i][j] = a[i+j]; // - заполнение массива.
}
}
// - ну и тут запись в файл
Не проверял, может где-то опечатался, но должно работать. Это только один из способов реализации, по идее есть еще. Но думаю принцип построения понятен и дальше разобраться самому не составит труда.