原题链接:C语言训练-求矩阵的两对角线上的元素之和
解题思路:
1.用一维数组代替二维数组;
2.设Length为二维数组中每行的长度;
3.对应一维数组长度为pow(Length,2);
4.设i代表行数,从1开始;(也可以从0开始,但下面关系式要变)
5.则主对角线上的元素对应在一维数组中的下标与i的关系为:(i-1)*Length+i-1 -------> (Length+1)*(i-1)
6.则副对角线上的元素对应在一维数组中的下标与i的关系为:Length+((i-1)*(Length-1))-1------> i*Length-i---->i*(Length-1)
4
1 2 3 4 i=1
5 6 7 8 i=2
9 10 11 12 i=3
13 14 15 16 i=4
3
1 2 3 i=1
4 5 6 i=2
7 8 9 i=3
对于行数为奇数的二维数组,主,副对角线相交的元素,加了两遍,最后要减去;
参考代码:
#include <stdio.h> #include <malloc.h> #include <math.h> int main() { int *Matrix; //一维数组 int Length, Sum = 0; //二维数组宽度,和 scanf( "%d", &Length ); Matrix = (int *) malloc( pow( Length, 2 ) * sizeof(int) );//分配空间长度pow(Length,2) for ( int i = 0; i < pow( Length, 2 ); i++ ) //输入矩阵 scanf( "%d", &Matrix[i] ); for ( int i = 1; i <= Length; i++ ) Sum += ( (Matrix[(i-1)*(Length+1)]) +(Matrix[i*(Length-1)])); //求和 if ( Length % 2 != 0 ) printf( "%d", Sum - Matrix[2 * Length - 2] ); //Length为奇数减去主副对角共有元素输出 else printf( "%d", Sum ); //Length为偶数直接输出 return(0); }
别忘点赞哦-.-
0.0分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复