2009西电计算机研究生复试上机题

时间:2021-07-27 06:35:37

题目描述

请写一个程序,对于一个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
 

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

 

来源
 


/********************************* 
 *    日期:2013-3-8
 *    作者:SJF0115 
 *    题号: 天勤OJ 题目1215: Problem B 
 *    来源:http://acmclub.com/problem.php?id=1215
 *    结果:AC 
 *    来源:2009年西电计算机研究生复试上机题 
 *    总结: 
**********************************/ 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int Matrix[10][10];

//排序函数
int cmp(const void *a,const void *b){
	return *(int *)b - *(int *)a;
}
int main(){
	int i,j,M;
	int Sum[50];
	while(scanf("%d",&M) != EOF){
		memset(Sum,0,sizeof(Sum));
		for(i = 0;i < M;i++){
			for(j = 0;j < M;j++){
				//输入数据
				scanf("%d",&Matrix[i][j]);
			}
		}
		int index = 0;
		//每一行的和
		for(i = 0;i < M;i++){
			for(j = 0;j < M;j++){
				Sum[index] += Matrix[i][j];
			}
			index++;
		}
		//每一列的和
		for(i = 0;i < M;i++){
			for(j = 0;j < M;j++){
				Sum[index] += Matrix[j][i];
			}
			index++;
		}
		//主对角线的和
		for(i = 0;i < M;i++){
			Sum[index] += Matrix[i][i];
		}
		index++;
		//次对角线的和
		for(i = 0;i < M;i++){
			Sum[index] += Matrix[i][M-i-1];
		}
		//排序
		qsort(Sum,2*M+2,sizeof(Sum[0]),cmp);
		//输出
		for(i = 0;i <= 2*M+1;i++){
			printf("%d",Sum[i]);
			if(i == 2*M+1){
				printf("\n");
			}
			else{
				printf(" ");
			}
		}
	}
	return 0;
}



/********************************* 
 *    日期:2013-3-8
 *    作者:SJF0115 
 *    题号: 天勤OJ 题目1215: Problem B 
 *    来源:http://acmclub.com/problem.php?id=1215
 *    结果:AC 
 *    来源:2009年西电计算机研究生复试上机题 
 *    总结: 
**********************************/ 
#include<stdio.h>
#include<stdlib.h>

int Matrix[10][10];
//排序函数
int cmp(const void *a,const void *b){
	return *(int *)b -*(int *)a;
}
int main(){
	int i,j,M;
	while(scanf("%d",&M) != EOF){
		//Sum[0 - M-1] 1 - M行 每行的和
		//Sum[M-1 - 2M-1] 1 - M列 每列的和
		//Sum[2M] 主对角线的和
		//Sum[2M+1] 次对角线的和
		int Sum[22] = {0};
		for(i = 0;i < M;i++){
			for(j = 0;j < M;j++){
				//输入数据
				scanf("%d",&Matrix[i][j]);
				//每一行
				Sum[i] += Matrix[i][j];
				//每一列
				Sum[j + M] += Matrix[i][j];
				//主对角线
				if(i == j){
					Sum[2*M] += Matrix[i][j];
				}
				//次对角线
				if(i + j == M-1){
					Sum[2*M+1] += Matrix[i][j]; 
				}
			}
		}
		//排序
		qsort(Sum,2*M+2,sizeof(int),cmp);
		//输出
		for(i = 0;i <= 2*M+1;i++){
			printf("%d",Sum[i]);
			if(i == 2*M+1){
				printf("\n");
			}
			else{
				printf(" ");
			}
		}
	}
	return 0;
}






注意:

每个整数(除最后一个)后跟一个空格,最后一个整数换行。

本题多组测试用数据。