解题思路:
我们举一个例子
设一个二维数组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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复