タイトル説明
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
サンプル出力コピー
159145144135 81 60 44 32 28 27
ACコード
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
//res为结果数组
int a[10][10];
int res1[10];
int res2[10];
int res[10];
bool cmp(int a,int b)
{
return a > b;
}
int main()
{
int m;
while (scanf("%d",&m) != EOF)
{
int j;
//接收元素
for (int i = 0;i < m;i++)
for (int j = 0;j < m;j++)
scanf("%d",&a[i][j]);
//每一行元素和,第i行元素和存放在res[i]中
//注意:对于多组测试数据,每次要初始化数组,下面同理
memset(res1,0,sizeof res1);
for (int i = 0;i < m;i++)
for (int j = 0;j < m;j++)
res1[i] += a[i][j];
//每一列元素和
memset(res2,0,sizeof res2);
for (int i = 0;i < m;i++)
for (int j = 0;j < m;j++)
res2[i] += a[j][i];
//主对角线元素和
int sum1 = 0;
for (int i = 0;i < m;i++)
{
j = i;
sum1 += a[i][j];
}
//副对角线元素和
int sum2 = 0;
for (int i = 0;i < m;i++)
{
j = m - i - 1;
sum2 += a[i][j];
}
//将所有数据搬到res结果数组中
j = 0;
for (int i = 0;i < m;i++) res[j++] = res1[i];
for (int i = 0;i < m;i++) res[j++] = res2[i];
res[j++] = sum1;
res[j++] = sum2;
sort(res,res + j,cmp);
for (int i = 0;i < j;i++) printf("%d ",res[i]);
puts("");
}
return 0;
}