Problem B

来源:互联网 发布:数据透视图去掉汇总行 编辑:程序博客网 时间:2024/06/08 15:33

题目描述

请写一个程序,对于一个m行m列的(1<m<10)的方阵,求其每一行,每一列及主对角线元素之和,最后按照从大到小的顺序依次输出。

输入

共一组数据,输入的第一行为一个正整数,表示m,接下来的m行,每行m个整数表示方阵元素。

输出

从大到小排列的一行整数,每个整数后跟一个空格,最后换行。

样例输入

415 8 -2 631 24 18 71-3 -9 27 1317 21 38 69

样例输出

159 145 144 135 81 60 44 32 28 27

提示

#include <cstdio>#include <algorithm>using namespace std;const int maxn=15;int a[maxn][maxn];int b[25]={0};bool cmp(int a,int b){    return a>b;}int main(){    int m,first=1;    while(scanf("%d",&m)==1){        for(int i=0;i<m;i++)            for(int j=0;j<m;j++)                scanf("%d",&a[i][j]);        int cnt=0;        for(int i=0;i<m;i++){            int sum=0;            for(int j=0;j<m;j++) sum+=a[i][j];            b[cnt++]=sum;        }        for(int j=0;j<m;j++){            int sum=0;            for(int i=0;i<m;i++) sum+=a[i][j];            b[cnt++]=sum;        }        int s1=0;        for(int i=0;i<m;i++) s1+=a[i][i];        b[cnt++]=s1;        int s2=0;        for(int i=0;i<m;i++) s2+=a[i][m-1-i];        b[cnt++]=s2;        sort(b,b+cnt,cmp);        for(int i=0;i<cnt;i++) printf("%d ",b[i]);        printf("\n");    }    return 0;}