1542 - Problem B

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 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

C语言解答

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int cmp(const void *a,const void *b) {
        return *(int *)b-*(int *)a;
}

int main() {
        int a[32];
        int n,i,j,t;
        while(scanf("%d",&n)!=EOF) {
                memset(a,0,sizeof(a));
                for(i=0;i<n;i++) for(j=0;j<n;j++) {
                        scanf("%d",&t);
                        a[i]+=t;
                        a[j+n]+=t;
                        if (i==j) a[n+n]+=t;
                        if (i+j==n-1) a[n+n+1]+=t;
                }
                qsort(a,n+n+2,sizeof(a[0]),cmp);
                for(i=0;i<n+n+1;i++) printf("%d ",a[i]);
                printf("%d\n",a[i]);
        }
        return 0;
}

C++解答

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int cmp(const void *a,const void *b) {
	return *(int *)b-*(int *)a;
}

int main() {
	int a[32];
	int n,i,j,t;
	while(scanf("%d",&n)!=EOF) {
		memset(a,0,sizeof(a));
		for(i=0;i<n;i++) for(j=0;j<n;j++) {
			scanf("%d",&t);
			a[i]+=t;
			a[j+n]+=t;
			if (i==j) a[n+n]+=t;
			if (i+j==n-1) a[n+n+1]+=t;
		}
		qsort(a,n+n+2,sizeof(a[0]),cmp);
		for(i=0;i<n+n+1;i++) printf("%d ",a[i]);
		printf("%d\n",a[i]);
	}
	return 0;
}

Java解答

import java.util.*;

public class Main{
  final static Scanner jin=new Scanner(System.in);
  public static void main(String args[]){
    while(jin.hasNextInt()){
      int m=jin.nextInt();
      int sums[]=new int[2*m+2];
      int x;
      Arrays.fill(sums,0);
      for(int i=0;i<m;i++){
        for(int j=0;j<m;j++){
          x=jin.nextInt();
          sums[i]+=x;
          sums[j+m]+=x;
          if(i==j)sums[2*m]+=x;
          if(i+j+1==m)sums[2*m+1]+=x;
        }
      }
      Arrays.sort(sums);
      System.out.print(sums[2*m+1]);
      for(int i=2*m;i>=0;i--)
        System.out.print(" "+sums[i]);
      System.out.println();
    }
  }
}