关于对角线元素条件
为什么可以用(i%2==0 && j%2==0)来表示?怎么得到的?
为什么可以用(i%2==0 && j%2==0)来表示?怎么得到的?
2019-02-16
不好意思,上面给的代码是错的,我现在知道问题了。
对角线有主对角线和次对角线,主对角线是 ( i == j ),次对角线是 ( i + j == 矩阵维度 - 1 ),本例中次对角线是 ( i + j == 2 )。
而(i%2==0 && j%2==0)表示的是行号和列号都是偶数的位置,即下面矩阵为1的位置:
当矩阵维度是3时:
1 0 1 0 1 0 1 0 1
当矩阵维度是4时:
1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1
当矩阵维度是5时:
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
可以发现,当举证维度是3时,行号和列号都为偶数的位置正好是主对角线和次对角线,这只是一个巧合,因为当矩阵维度大于3时,他们的位置并不在主对角线线和次对角线上。
附上正确代码:
#include <stdio.h>int main(){ int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i,j; int sum=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i==j)sum+=arr[i][j]; else if(i+j==2)sum+=arr[i][j]; } } printf("对角线元素之和是:%d\n",sum); return 0; }
对角线条件就俩,1是满足从左上到右下的对角线,特点是i和j相同,
2是满足从左下到右上的对角线,特点是i+j等于2,因为i最大时j最小,i每次加1,j每次减1,两者的和不变
#include <stdio.h>
int main()
{
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
int sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++){
if(i == j || i + j == 2){
printf("%d==>%d\n",i,j);
sum +=arr[i][j];
}
}
}
printf("对角线元素之和是:%d\n",sum);
return 0;
}
举报