题解 | #Problem B#
Problem B
https://www.nowcoder.com/practice/bcd4ec5971054997a1dc282067aa1d8b
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <stack> #include <map> #include <queue> #include <cmath> using namespace std; int arr[11][11]; int res[50]; bool compare(int o1, int o2) { return o1 > o2; } int main() { int m; while (scanf("%d", &m) != EOF) { // 注意 while 处理多个 case for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { scanf("%d", &arr[i][j]); } } int index = 0; //存放数组的下标 for (int i = 0; i < m; i++) { //每行之和 int sum = 0; for (int j = 0; j < m; j++) { sum += arr[i][j]; } res[index++] = sum; } for (int i = 0; i < m; i++) { //每列之和 int sum = 0; for (int j = 0; j < m; j++) { sum += arr[j][i]; } res[index++] = sum; } int sum = 0; for (int i = 0; i < m; i++) { //主对角线之和 sum += arr[i][i]; } res[index++] = sum; sum = 0; for (int i = 0; i < m; i++) { //副对角线之和 sum += arr[i][m - 1 - i]; } res[index++] = sum; sort(res, res + index, compare); for (int i = 0; i < index; i++) { printf("%d ", res[i]); } printf("\n"); } } // 64 位输出请用 printf("%lld")