【问题标题】:Filling matrix with numbers in a specific way in C++?在 C++ 中以特定方式用数字填充矩阵?
【发布时间】:2018-07-07 12:57:53
【问题描述】:

我有一个程序,我必须打印一个矩阵,例如对于 n=5(用户可以输入任何正整数 n

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)。但是,该程序无法按预期工作。我想问一下为什么会这样。

【问题讨论】:

  • 您多次声明i(在最外层循环和两个最内层循环中)。这不是被禁止的,但它可能不是你想的那样。
  • 删除为什么我的程序无法运行问题中的代码是一个不寻常的选择,并且使问题无法回答。
  • 发布整个代码...我现在在“混乱”模式下运行。

标签: c++ algorithm matrix elements fill


【解决方案1】:

除了 ia 的多个声明之外,您的循环会不断将值分配给同一个变量。

// 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;
}

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多