【0】【1】【2】
【0】1 2 3
【1】4 5 6
【2】7 8 9
首先对角线之和就应该包括{【0,0】【1,1】【2,2】【0,2】【2,2】
但那代码中的i%2==0且j%2==0只能求出【0,0】【2,2】再加上for外的【1,1】,求得的sum应该是15,那问题来了【0,2】【2,2】去哪了?sum的结果还能等于25?
&&这个应该是且不是或吧?
求解答
你可以参考一下我写的,换成4*4或者5*5任意方形的矩阵都可以,比如arr[4][4] = {{1,2,3,4},{5,6,7,8},{1,2,3,4},{5,6,7,8}}; 然后row=column=4;你试试看
#include <stdio.h>int main() { int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i,j; int sum=0; int row,column; row = column =3; for(i=0;i<row;i++){ sum += (i==column-i-1)?(arr[i][i]):(arr[i][i]+arr[i][column-i-1]); } printf("对角线元素之和是:%d\n",sum); return 0; }
这代码是写的不好,我看了很多答案里的代码都是只能求这道题的3*3矩阵,换成4*4,5*5就不行了,不过这个在这道题来说还是对的,i%2==0&&j%2==0,第一行满足条件的是arr[0][0],arr[0][2],第二行没有,第三行arr[2][0],arr[2][2],最后加上中心的arr[1][1],没错,但这样的写法是很差的,稍微换一下,换成4*4的矩阵,这个代码全废了。
n*n矩阵,对角线元素应该有2n-1个,因为正反两条对角线。第i行的对角线元素是每行里的正数第i个和倒数第i个,也就是a[i][i]和a[i][n-1-i]。把这些加起来,一重循环就够了。最后别忘了减一次最中心的,因为这一元素被加了两遍
同理i=2且j=0的时候也是
i=0 且 j=2的时候也符合的 你想想