-
题目描述:
-
输入一个四行五列的矩阵,找出每列最大的两个数。
-
输入:
-
输入第一行包括一个整数n(1<=n<=1000),接下来的四行每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。
-
输出:
-
可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。
输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。
-
样例输入:
-
1 1 2 4 9 8 -1 4 9 8 8 12 9 8 7 0 7 8 9 7 0
-
样例输出:
-
12 9 9 9 8 7 8 9 8 8
-
提示:
-
每个数字后面都要输出一个空格
-
来源:
- 2005年华中科技大学计算机保研机试真题
-
-
#include<stdio.h> #include<stdlib.h> int map[5][4],map1[5][4],zb[5][2]; int cmp(const void *a,const void *b) { return *(int *)b-*(int *)a; } int main() { int n,i,j,t; scanf("%d",&n); while(n--) { int k=0; for(i=0;i<4;i++) { scanf("%d%d%d%d%d",&map[0][k],&map[1][k],&map[2][k],&map[3][k],&map[4][k]); k++; } for(i=0;i<5;i++) for(j=0;j<4;j++) map1[i][j]=map[i][j]; for(i=0;i<5;i++) qsort(map[i],4,sizeof(map[i][0]),cmp); for (i=0;i<2;i++) for(j=0;j<5;j++) { for(t=0;t<4;t++) { if(map[j][i]==map1[j][t]) { zb[j][i]=t; break; } } } for(i=0;i<5;i++) if(zb[i][0]>zb[i][1]) { t=zb[i][0]; zb[i][0]=zb[i][1]; zb[i][1]=t; } for(i=0;i<2;i++) printf("%d %d %d %d %d \n",map1[0][zb[0][i]],map1[1][zb[1][i]],map1[2][zb[2][i]],map1[3][zb[3][i]],map1[4][zb[4][i]]); } return 0; }