解题思路:
我们举一个例子
设一个二维数组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 人评分
点我有惊喜!你懂得!浏览:3886 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1089 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:739 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:615 |
输出正反三角形 (C语言代码)格式错误!!!浏览:1141 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:546 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:678 |
Hello, world! (C++代码)浏览:1745 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:609 |
字符逆序 (C语言代码)浏览:460 |