问题 E: Problem B
时间限制: 1 Sec 内存限制: 32 MB
献花: 109 解决: 45
[献花][花圈][TK题库]
题目描述
请写一个程序,对于一个m行m列的(1
特别注意的是,虽然题目中说名了输入输入共有一组,其实有多组,仍然需要用while来控制输入
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int MaxN = 10;
bool cmp(int a, int b)
{
return a > b;
}
int main()
{
#ifdef _DEBUG
ifstream cin("data.txt");
#endif // _DEBUG
int a[MaxN][MaxN], m ,k = 0,res[2*MaxN],sum, mainSum;
while (cin >> m)
{
k = mainSum = 0;
for (int i = 0; i < m; ++i) //输入顺带求行的和
{
sum = 0;
for (int j = 0; j < m; ++j)
{
cin >> a[i][j];
sum += a[i][j];
if (i == j)
mainSum += a[i][j];//主对角线
}
res[k++] = sum;
}
res[k++] = mainSum;
mainSum = 0;
for (int i = 0; i < m; ++i)//求每一列的和
{
sum = 0;
for (int j = 0; j < m; ++j)
{
sum += a[j][i];
if (i + j == m - 1)
mainSum += a[j][i]; //次对角线
}
res[k++] = sum;
}
res[k++] = mainSum;
sort(res, res + k, cmp);
for (int i = 0; i < k; ++i)
{
cout << res[i];
if (i != k - 1)
cout << " ";
}
cout << endl;
}
#ifdef _DEBUG
cin.close();
system("pause");
#endif // _DEBUG
return 0;
}
/**************************************************************
Problem: 1978
User: Sharwen
Language: C++
Result: 升仙
Time:44 ms
Memory:1708 kb
****************************************************************/