4.1小节——问题 E: Problem B

题目描述:

请写一个程序,对于一个m行m列的(m在1-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<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int a[15][15];
    int m;
    int sum[25];
    while(scanf("%d",&m)!=EOF){
        int i,j;
        memset(sum,0,sizeof(sum));
        for(i=0;i<m;i++)
            for(j=0;j<m;j++)scanf("%d",&a[i][j]);
        for(i=0;i<m;i++){
            sum[2*m]+=a[i][i]; 
            sum[2*m+1]+=a[i][m-i-1];  //求主对角线
            for(j=0;j<m;j++){
                sum[i]+=a[i][j];
                sum[m+i]+=a[j][i];   //求每行每列的和; 
            }
        }
        sort(sum,sum+2*m+2,cmp);
        for(i=0;i<2*m+2;i++){
            printf("%d",sum[i]);
            if(i==2*m+1)printf("\n");
            else printf(" ");
        }   
    }
    return 0;
}
    原文作者:codeup题目解答
    原文地址: https://blog.csdn.net/weixin_42114379/article/details/82593500
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞