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

2019-04-14 18:51发布

题目描述 请写一个程序,对于一个m行m列的(1 输入 共一组数据,输入的第一行为一个正整数,表示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
 
提示 [+] *** 提示已隐藏,点击上方 [+] 可显示 ***  
来源 2009年西电计算机研究生复试上机题  

/********************************* * 日期:2013-3-8 * 作者:SJF0115 * 题号: 天勤OJ 题目1215: Problem B * 来源:http://acmclub.com/problem.php?id=1215 * 结果:AC * 来源:2009年西电计算机研究生复试上机题 * 总结: **********************************/ #include #include #include 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(" "); } else{ printf(" "); } } } return 0; }

/********************************* * 日期:2013-3-8 * 作者:SJF0115 * 题号: 天勤OJ 题目1215: Problem B * 来源:http://acmclub.com/problem.php?id=1215 * 结果:AC * 来源:2009年西电计算机研究生复试上机题 * 总结: **********************************/ #include #include 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(" "); } else{ printf(" "); } } } return 0; }





注意: 每个整数(除最后一个)后跟一个空格,最后一个整数换行。 本题多组测试用数据。