在C ++中以特定方式使用数字填充矩阵?

时间:2018-01-28 20:27:58

标签: c++ algorithm matrix elements fill

我有一个程序,我必须打印矩阵,例如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 个答案:

答案 0 :(得分:0)

除了 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;
}