天天看點

1978 Problem E Problem B

問題 E: Problem B

時間限制: 1 Sec  記憶體限制: 32 MB

題目描述

請寫一個程式,對于一個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

經驗總結

AC代碼

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
bool cmp(int a,int b)
{
  return a>b;
}
int main()
{
  int n,mat[20][20];
  while(~scanf("%d",&n))
  {
    if(n<=1||n>=10) 
      break;
    int sum[40]={0};
    for(int i=0;i<n;i++)
      for(int j=0;j<n;j++)
        scanf("%d",&mat[i][j]);
    for(int i=0;i<n;i++)
    {
      for(int j=0;j<n;j++)
      {
        if(i==j)
          sum[2*n]+=mat[i][j];
        if(i==n-j-1)
          sum[2*n+1]+=mat[i][j];
        sum[i]+=mat[i][j];
        sum[n+i]+=mat[j][i];
      }
    }
    sort(sum,sum+2*n+2,cmp);
    for(int i=0;i<=2*n+1;i++)
      printf("%d ",sum[i]);
    printf("\n");
  }
  return 0;
}      

繼續閱讀