问答详情
源自:6-11 多维数组的遍历

关于对角线元素条件

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

提问者:B22 2019-02-16 02:01

个回答

  • Howard229
    2019-02-16 11:23:08
    已采纳

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

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


  • 小程序魔王
    2019-04-18 19:27:08

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

    }


  • 白腿小隼熊猫鸟
    2019-02-22 19:02:53

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

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

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

  • qq_慕前端9533399
    2019-02-21 16:35:14

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

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

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

                


  • Howard229
    2019-02-16 11:28:39

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

  • Howard229
    2019-02-16 11:08:24

    附上正确代码:

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

    }

  • Howard229
    2019-02-16 09:44:50

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