CC++[codeup 1978]排序

xiaoxiao2021-02-28  18

题目描述1978:ProblemB 排序

  输入于一个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 <iostream> #include <algorithm> using namespace std; bool cmp(int a, int b) { return a > b; } //计算行列元素的和,int axis = 0,计算列元素的和,axis = 1,计算行元素的和 //返回值K为当前,数组s[]的长度 int sum(int a[][10], int m, int axis, int s[], int k) { for (int i = 0; i < m; i++) { int sum = 0; for (int j = 0; j < m; j++) { if (axis == 1) sum += a[i][j]; if (axis == 0) sum += a[j][i]; } s[k++] = sum; } return k; } int main() { int m; while(cin >>m) { int a[m][10], s[2 * m + 2] = {0}; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; } } int k = 0; k = sum(a, m, 1, s, k); k = sum(a, m, 0, s, k); //对角线元素的和 for (int i = 0; i < m; i++) { s[k] += a[i][i]; s[k + 1] += a[i][m - 1 - i]; } sort(s, s + 2 * m + 2, cmp); for (int i = 0; i < 2 * (m + 1); i++) { cout << s[i]; if (i < 2 * m + 1) cout << ' '; } cout << endl; } return 0; }
转载请注明原文地址: https://www.6miu.com/read-1650294.html

最新回复(0)