Description
请写一个程序,对于一个m行m列的(1<m<10)的方阵,求其每一行,每一列及主对角线元素之和,最后按照从大到小的顺序依次输出。
Input
共一组数据,输入的第一行为一个正整数,表示m,接下来的m行,每行m个整数表示方阵元素。
Output
从大到小排列的一行整数,每个整数后跟一个空格,最后换行。
Sample Input
4
15 8 -2 6
31 24 18 71
-3 -9 27 13
17 21 38 69
Sample Output
159 145 144 135 81 60 44 32 28 27
#include<bits/stdc++.h>
using namespace std;
int a[11][11],ans[101];
int main()
{
int i,j,m,gs;
while(cin>>m)
{
gs=0;
memset(a,0,sizeof(a));
memset(ans,0,sizeof(ans));
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(i=1;i<=m;i++)
{
gs++;
for(j=1;j<=m;j++)
{
ans[gs]+=a[i][j];
}
}
for(i=1;i<=m;i++)
{
gs++;
for(j=1;j<=m;j++)
{
ans[gs]+=a[j][i];
}
}
gs++;
for(i=1;i<=m;i++)
{
ans[gs]+=a[i][i];
}
gs++;
for(i=1;i<=m;i++)
{
ans[gs]+=a[i][m-i+1];
}
sort(ans+1,ans+gs+1);
for(i=gs;i>1;i--)
{
cout<<ans[i]<<' ';
}
cout<<ans[1];
cout<<endl;
}
return 0;
}