感谢晴神《算法笔记》的帮助。
试题资源:http://codeup.cn/problem.php?cid=100000581&pid=4
题目描述
请写一个程序,对于一个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
特别注意:一个测试点可能包含多个矩阵的输入
-
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> #include <fstream> #include <string> #include <cmath> #include <algorithm> #include <queue> #include <map> using namespace std; #define nMAX 10 bool cmp(int a, int b){ return a>b; } int main() { int m,sum_row_col_dia[nMAX+nMAX+2]; while(cin>>m){ memset(sum_row_col_dia,0,sizeof(sum_row_col_dia)); for(int i=0;i<m;i++){ for(int j=0;j<m;j++) { int t; scanf("%d", &t); sum_row_col_dia[i] += t; sum_row_col_dia[j+m] += t; if(i==j) sum_row_col_dia[m+m]+=t; if(i==m-j-1) sum_row_col_dia[m+m+1]+=t; } } sort(sum_row_col_dia,sum_row_col_dia+m*2+2,cmp); for(int i=0;i<m*2+2;i++){ cout<<sum_row_col_dia[i]; if (i != m*2+1) cout << " "; } cout<<endl; } return 0; }