【问题标题】:Print matrix secondary diagonal in C++ with for loop?用for循环在C++中打印矩阵二次对角线?
【发布时间】:2017-12-24 10:54:42
【问题描述】:

我有一个简单的程序,我想在其中打印矩阵次对角线中的所有元素 - 这些是数字 5、9、13、-21、12,但程序无法按预期工作。我做错了什么?

#include <iostream>
#define SIZE 5
int a[SIZE][SIZE]={
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{100,-21,-70,345,77},
{12,17,765,98,55}
};

for(int i=0;i<5;i++)//The first index increases
for(int k=5;k>0;k--)//The second index decreases
cout<<a[i][k]<<endl;//Printing the element

【问题讨论】:

  • 一些关于你的代码的cmets:如果你使用SIZE之类的东西,那么使用是一致的。它应该说for(int i=0;i&lt;SIZE;...。如果您稍后将 SIZE 更改为 4,您的 for 循环将迭代到错误的边界。此外,您应该始终使用缩进。而且我建议始终使用方括号,即使您只有一个命令 - 如果您稍后在忘记省略括号时添加另一个命令,事情就会变糟。

标签: c++ matrix diagonal


【解决方案1】:

不需要第二个for loop。你可以只用一个:

for (int i = 0; i < SIZE; i++){
    std::cout << a[i][SIZE - i - 1] << ' ';
}

这样,您可以使用单个 for 循环来获得两个相反方向的索引。

【讨论】:

  • @Y.Ivanov 换句话说,对角线是一维的,因此迭代它只涉及一个循环。您不会尝试使用两个循环来迭代列。
【解决方案2】:

嗯,你做到了

for (k=5; k>0; k--)

但是没有a[0][5]

第一行的最后一个元素是a[0][4] 所以你的数组应该从 4 开始并下降到 0

for (k=4; k>=0; k--)

顺便说一句,只需 1 个循环即可完成。

对于第二条对角线的每个元素,索引之和为 4。

0+4=4
1+3=4
2+2=3
3+1=4
4+0=4

所以你可以写成a[i][4-i]

for(i=0; i<5; i++) 
cout<<a[i][4-i]<<endl;

【讨论】:

    【解决方案3】:

    尝试这样做:

    for(int i=0; i<5; i++) {
        cout << a[i][4-i] << endl;
    }
    

    【讨论】:

    • 为什么我的答案是第一个正确答案时我得到一个减号?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2020-07-15
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多