题目描述
求矩阵的两对角线上的元素之和
输入
矩阵的行数N
和一个N*N的整数矩阵a[N][N](N<=10)
输出
所输矩阵的两对角线上的元素之和
样例输入
3 1 2 3 4 5 6 7 8 9
样例输出
25
首先我们先观察一下矩阵(为了方便您的阅读,对角线元素已经加红)
1
1
1阶矩阵和为1
2
1 2
3 4
2阶矩阵和为1+4+2+3=10
3
1 2 3
4 5 6
7 8 9
3阶矩阵和为1+5+9+7+3=25
4
4阶矩阵和为1+6+11+16+13+10+7+4=68
5
5阶矩阵和为1+7+13+19+25+21+17+9+5=117
从中可以看出偶数阶矩阵和是主对角线和副对角线元素和的相加
奇数阶矩阵是主对角线和副对角线元素和相加再减去主对角线和副对角线公共元素
我们利用一个二维数组来保存矩阵元素,通过二维数组完成矩阵对角线元素求和
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N;
scanf("%d",&N); //读入矩阵阶数
int a[N][N];
int sum1=0,sum2=0,sum=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
scanf("%d",&a[i][j]); //读入矩阵值
}
}
for(int i=0;i<N;i++)
{
for(int j=i;j<=i;j++)
{
sum1=sum1+a[i][j]; //读入主对角线元素
}
}
for(int i=0;i<N;i++)
{
for(int j=N-1-i;j>=N-i-1;j--)
{
sum2=sum2+a[i][j]; //读入副对角线元素
}
}
if(N%2!=0) //如果它是奇数阶
{
sum=sum1+sum2-a[N/2][N/2]; //减去主对角线和副对角线重合元素在求和
}
else
{
sum=sum1+sum2; //偶数阶矩阵直接求和
}
printf("%d",sum);
return 0;
}