codeup 习题 Problem B

题目描述

请写一个程序,对于一个m行m列的(1

输入

共一组数据,输入的第一行为一个正整数,表示m,接下来的m行,每行m个整数表示方阵元素。

输出

从大到小排列的一行整数,每个整数后跟一个空格,最后换行。

样例输入 Copy

4
15 8 -2 6
31 24 18 71
-3 -9 27 13
17 21 38 69

样例输出 Copy

159 145 144 135 81 60 44 32 28 27

 

AC代码

#include
#include
#include
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;
}

 

你可能感兴趣的:(codeup习题)