帽子是好朋友


私信TA

用户名:uq_80478585267

访问量:159

签 名:

等  级
排  名 25913
经  验 539
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

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

设一个二维数组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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区