考虑以下代码。我必须找出 C 中两条对角线的差。
#include <stdio.h>
int main() {
int n,a[100][100],sum1=0,sum2=0;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j){
scanf("%d",&a[i][j]);
if(i==j) sum1+=a[i][j];
else if((i+j)==(n-1)) sum2+=a[i][j];
}
}
if(sum1>sum2) printf("%d",(sum1-sum2));
else printf("%d",(sum2-sum1));
return 0;
}
当我将 else if
更改为 if
时,代码可以正常工作。为什么?
最佳答案
我想我明白了你想知道的:
if(i==j) sum1+=a[i][j];
if((i+j)==(n-1)) sum2+=a[i][j];
意味着这两种情况都可能有效,因为您对它们都进行了测试。
另一方面,如果你写
if(i==j) sum1+=a[i][j];
else if((i+j)==(n-1)) sum2+=a[i][j];
您假设这些条件中只有一个可以运行,或者都不能运行,但绝不能同时运行。所以如果第一项(i==j)
是 true
第二个将不再进行测试。但您需要对两者进行测试以确定您想要计算的内容。事实上else if
永远属于if
,所以最多只能满足一个条件,而在另一个版本中你只有两个独立的 ifs
.
关于c - c 对角线差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32798228/