为了账号安全,请及时绑定邮箱和手机立即绑定

关于对角线元素条件

为什么可以用(i%2==0 && j%2==0)来表示?怎么得到的?

正在回答

7 回答

不好意思,上面给的代码是错的,我现在知道问题了。

对角线有主对角线和次对角线,主对角线是 ( 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;    
}


4 回复 有任何疑惑可以回复我~
#1

Howard229

矩阵维度是5时少了一行,我不太适合写文档。。。
2019-02-16 回复 有任何疑惑可以回复我~
#2

蓝布阁

我感觉这个是正确的呀!
2019-02-25 回复 有任何疑惑可以回复我~
#3

Howard229 回复 蓝布阁

矩阵维度为3是,被选中的应该是下面这个样子的 1 0 1 0 0 0 1 0 1 在这一章节的题目中,i%2==0 && j%2==0的结果是20,而正确结果是25,矩阵维度为3时他们也不相等。
2019-02-27 回复 有任何疑惑可以回复我~

对角线条件就俩,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;    

}


0 回复 有任何疑惑可以回复我~

可以观察对角线元素的下标的特点,一个是行等于列,一个是行加列等于2,所以可以把if()语句写成这样:

 if(i == j || (i + j) == 2)

没有必要去关心元素本身的值。

0 回复 有任何疑惑可以回复我~

这题对角线是1,5,9和7,5,3  其中的5只记一次。 编写的话因为都是奇数所以用取余

if(arr[i][j]%2!=0)

{sum+=arr[i][j];

            


0 回复 有任何疑惑可以回复我~

无视我的回答吧,我回答得一塌糊涂,是错的

0 回复 有任何疑惑可以回复我~
#1

蓝布阁

哈哈,你是真的有意思
2019-02-25 回复 有任何疑惑可以回复我~

附上正确代码:

#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]; 

    }

    printf("对角线元素之和是:%d\n",25);

    return 0;    

}

1 回复 有任何疑惑可以回复我~

对角线元素不应该是( i == j ) 吗?有问题来源吗

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926210    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

关于对角线元素条件

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信