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

不知道哪里错了。。。运行不出来,什么也没显示

https://img1.sycdn.imooc.com//5c53aba000012f4f07350611.jpg求大神解答

正在回答

3 回答

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

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

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

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

首先你应该明确对角线元素的下标具有什么特征:

  1. 从左上往右下的那条对角线的元素的特征:行列下标相等,如arr[0][0], arr[1][1];

  2. 从右上往左下的那条对角线的元素的特征:行列下标之和为2,如arr[0][2], arr[1][1];

    你应该根据这个设置判断条件,你可以用两个for循环,一个对i,一个对j。

    你可以在纸上画画:

    1    2    3

    4    5    6

    7    8    9

    还有你可能有这样的疑问: 1 + 5 +9 +3 +5+7 = 30, 为什么答案是25?

    因为题目问的是对角线元素之和,你这样就算多了1次5, 而我们的程序之所以算出的是25,是因为系统一个一个地检验元素是否满足i == j 或者i + j ==2,遇到5时发现两个条件均满足,但只算一次,满足条件。

你的程序中的=有误,表赋值,==才是相等,

0 回复 有任何疑惑可以回复我~
#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++)
    {
       sum+=arr[i][i];
    }
    for(i=2;i>=0;i--)
    {
        sum+=arr[i][2-i];
    }
    printf("对角线元素之和是:%d\n",sum-5);
    return 0;    
}

这是我的代码,你看看吧,还有就是==是表判断,=是赋值

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

举报

0/150
提交
取消

不知道哪里错了。。。运行不出来,什么也没显示

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