Заполнение матрицы числами определенным образом в C++?
У меня есть программа, в которой я должен напечатать матрицу, например, для n=5 (пользователь может ввести любое положительное целое число n<20) следующим образом:
0 20 19 17 14
1 0 18 16 13
2 5 0 15 12
3 6 8 0 11
4 7 9 10 0
Моей первоначальной идеей было заполнение главной диагонали нулями, а не от 1 до (n*n-n)/2
заполнить матрицу этими элементами под главной диагональю (i>j)
, и из (n*n-n)/2
до n - элементы над главной диагональю (i<j)
, Тем не менее, программа не работает, как ожидалось. Я хотел бы спросить, почему это происходит.
1 ответ
Помимо множественного объявления i и a, ваши циклы продолжают присваивать значения одной и той же переменной.
// changed i to k because of double declaration
for(int k=1; k<(n*n-n)/2; k++)
{
a[i][j]=k;
}
Лучший способ сделать это будет:
int number = 1;
int col = 0, row = 1;
while(col < n && row < n){
for(int pos = row; pos < n; ++pos){
mat[col][pos] = number++;
}
++col;++row;
}
col = n-1;
row = n-2;
while(col >= 0 && row >= 0){
for(int pos = row; pos >= 0; --pos){
mat[col][pos] = number++;
}
--col;--row;
}