题目描述
请写一个程序,对于一个m行m列的(1<m<10)的方阵,求其每一行,每一列及主对角线元素之和,最后按照从大到小的顺序依次输出。
输入
共一组数据,输入的第一行为一个正整数,表示m,接下来的m行,每行m个整数表示方阵元素。
输出
从大到小排列的一行整数,每个整数后跟一个空格,最后换行。
样例输入
4 15 8 -2 6 31 24 18 71 -3 -9 27 13 17 21 38 69
样例输出
159 145 144 135 81 60 44 32 28 27
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main(){
int n,sum;
while(scanf("%d",&n)!=EOF){
int a[10][10];
int b[35];
int i,j,k=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
//cin>>a[i][j];
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)
{ sum=0;
for(j=0;j<n;j++)
sum+=a[i][j];
b[k++]=sum;
}
for(j=0;j<n;j++)
{
sum=0;
for(i=0;i<n;i++)
{
sum+=a[i][j];
}
b[k++]=sum;
}
sum=0;
for(i=0;i<n;i++)
{
sum+=a[i][i];
}
b[k++]=sum;
sum=0;
for(i=n-1;i>=0;i--)
{
sum+=a[i][n-1-i];
//printf("%d ",a[i][n-1-i]);
}
b[k++]=sum;
sort(b,b+k,cmp);
for(i=0;i<k;i++)
{
printf("%d ",b[i]);
}
printf("\n");
}
return 0;
}