问题 F: Problem B

来源:互联网 发布:淘宝登陆页面打不开 编辑:程序博客网 时间:2024/06/01 13:26
题目描述
请写一个程序,对于一个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<string>#include<vector>#include<algorithm>using namespace std;bool cmp(int a, int b){return a > b;}//记住左小右大,正常的从小到大排序是return a<b;,那么从大到小就反过来就行int main(){int m; int temp;vector<vector<int> > ss; vector<int> s;//声明二维向量容器和一维向量容器while (cin >> m)//这题题目有点BUG,应该是测试多组数据,否则过不了{for (int i = 0; i < m; i++){for (int j = 0; j < m; j++){cin >> temp;s.push_back(temp);}ss.push_back(s);s.clear();//要记得每次用完容器后要倒干净}int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;for (int i = 0; i < m; i++){sum1 = 0; sum2 = 0;for (int j = 0; j < m; j++){sum1 += ss[i][j];//计算每行的和sum2 += ss[j][i];//计算每列的和if (i == j)sum3 += ss[i][j];//计算主对角线的和if (i + j == m - 1)sum4 += ss[i][j];//计算副对角线的和,题目的另一个BUG,不想吐槽了我}s.push_back(sum1);s.push_back(sum2);}s.push_back(sum3);s.push_back(sum4);sort(s.begin(), s.end(), cmp);for (int i = 0; i < s.size(); i++){if (i != s.size() - 1)cout << s[i] << " ";elsecout << s[i] << endl;}s.clear();//用完容器一定要倒干净ss.clear();//由于是多组数据,二维的容器也要倒干净}}


0 0
原创粉丝点击