今天我在acm系统刷题时,遇到了一道这样的题目:
题目描述:求一个3×3矩阵对角线元素之和。输入矩阵,输出主对角线 副对角线 元素和
样例输入
1 2 3
1 1 1
3 2 1
样例输出 3 7
拿到这个题时脑子里第一时间想的是怎么先去求主对角线各元素之和,求主对角线很简单,只需要一层for循环即可.到求副对角线元素之和时,不知道自己在想啥,竟然第一思路是和求主对角线元素之和一个原理,只是把它逆向一下,结果是输出两个数都是主对角线元素之和的结果.然后自己在草稿纸上把这个三阶矩阵画出来,才发现自己的那个想法其实是倒着求主对角线元素的和.
求副对角线上的元素和还是要从矩阵第一行开始,只不过是第二个下标用矩阵阶数和当前遍历到的行数表示出来即可,并不需要两重for循环来计算.要不然计算结果将是整个矩阵元素之和.
最后改正后的代码是:
#include<stdio.h>
int main()
{
int i,j;
int a[3][3];
int s = 0,t = 0;
for(i = 0;i < 3;i++)
for(j = 0;j < 3;j++)
scanf("%d",&a[i][j]);
for(i = 0;i < 3;i++)
s += a[i][i];
for(i = 0;i < 3;i++)
t += a[i][3-i-1]; //犯错点
printf("%d %d",s,t);
return 0 ;
}
这个题虽然不难,但是自己在不断调试改正程序的过程中也学到了很多,比如,之前很多时候都想不到要去写篇博客,从中也知道思考问题必须从多个方面出发,考虑全面.奋斗奋斗
以后要常写博客,虽然自己还不知道博客具体要怎样去写,需要注意哪些方面.但是可以给自己留下宝贵的回忆,记忆深刻,也就不会犯类似的错误.微笑微笑