解题思路:
我们举一个例子

设一个二维数组a[i][j],当N=5的时候这个矩阵是这个样子(里面的数字是随便给的)

       a[0]  a[1]  a[2]  a[3]  a[4]

a[0]   1      2      3      4       5

a[1]   1      2      3      4       5

a[2]   1      2      3      4       5

a[3]   1      2      3      4       5

a[4]   1      2      3      4       5

我们设两个字母分别代替两条对角线上元素的和,c是从左上到右下的对角线,d是从右上到左下的对角线。

我们通过仔细观察就能发现,c的元素就是a[i][i]的和,d的元素就是a[i][N-i+1]的和,这里要强调一下,之所以是N-i+1是因为数组的第一个是0开头,所以一行的最后一列数字的数组是N-1,这些都能通过上面的例子看出。

现在离解决这个问题就差一步!,那就是N是偶数还是奇数是有差别的。

当N是一个奇数我们发现,如果我们直接认为结果是c+d,那么就会出错,因为c和d直接加会多加一个a[2][2],所以我们还需要减去这个数,那么这个数的规律我们再仔细观察,不难看出是a[N/2][N/2],如果是偶数自然就不会多出一个数啦,我们就可以直接加,所以我们还需要一个if-else语句来区分。

就这么多啦。


注意事项:

1我用的是vs2019所以scanf要写成scanf_s,其他版本删去_s即可

2避免部分同志还没有学过数组,我这里在说明一下竖着的那行a[0]是a[i],横着的就是a[j]



参考代码:

#include<stdio.h>

int main()

{

int N, a[10][10],i,j,s,c=0,d=0;

scanf_s("%d", &N);

for(i=0;i<N;i++)

for (j = 0; j < N; j++)

{

scanf_s("%d", &a[i][j]);

}

for (i = 0; i < N; i++)

{

c += a[i][i];

d += a[i][N - i - 1];

}

if (N % 2 == 0)

s = c + d;

else

s = c + d - a[N / 2][N / 2];

printf("%d", s);

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论