请写一个程序,对于一个m行m列的(1<m<10)的方阵,求其每一行,每一列及主对角线元素之和,最后按照从大到小的顺序依次输出。
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
return a>b;//元素从大到小输出;
}
int main()
{
int m,sum=0;
while(scanf("%d",&m)!=EOF)//这个一定要写,避免输入的m是其他东西
{
int a[10][10];
int b[100];
int k=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
}
for(int i=0;i<m;i++)//每一行元素相加 ,因为外层控制行循环在i=0时,内层要循环完才能做下一次循环
{
for(int j=0;j<m;j++)
{
sum+=a[i][j];
k++;
b[k]=sum;
}
}
for(int j=0;j<m;j++)//列元素相加
{
for(int i=0;i<m;i++)
{
sum+=a[i][j];
k++;
b[k]=sum;
}
}
sum=0;//sum要初始化
for(int i=0;i<m;i++)//主对角线相加
{
sum+=a[i][i];//主对角线元素下标都是一样的,a[i][i]
}
k++:
b[k]=sum;
sum=0;
for(int i=m-1;i>=0;i--)//副对角线元素相加
{
sum=a[i][m-1-i];
}
k++:
b[k]=sum;
sort(b,b+k,cmp);//排序
for(int i=0;i<k;i++)//输出元素
{
printf("%d ",b[i]);
}
printf("\n");
}
return 0;
}