题目1200:最大的两个数
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:3708
解决:966
题目描述:
-
输入一个四行五列的矩阵,找出每列最大的两个数。
输入:
-
输入第一行包括一个整数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
提示:
-
每个数字后面都要输出一个空格
-
注解:九度OJ里的一道题,花了好长时间做,但还是没有AC,先保存在这儿,改天有思路了再仔细思考一下
有bug的代码:
#include <stdio.h>
#include <limits.h>
#define MAXNUM 105
int
main(){
int
b[25],a[4][5];
int
n,j,i,k;
int
max1,max2,x1,x2,y1,y2;
int
count=0,col=0;
scanf
(
"%d"
,&n);
for
(k=0;k<n;k++){
for
(i=0;i<4;i++)
for
(j=0;j<5;j++)
scanf
(
"%d"
,&a[i][j]);
count=0;
for
(j=0;j<=4;j++){
max1=a[0][j];
x1=0,y1=j;
for
(i=1;i<=3;i++){
if
(a[i][j]>max1){
max1=a[i][j];
x1=i,y1=j;
}
}
b[count++]=max1;
a[x1][y1]=INT_MIN;
max2=a[0][j];
for
(i=1;i<=3;i++){
if
(a[i][j]>max2){
max2=a[i][j];
}
}
b[count++]=max2;
}
for
(i=0;i<count;i++){
if
(i%2==0)
printf
(
"%d "
,b[i]);
}
printf
(
"\n"
);
for
(i=0;i<count;i++){
if
(i%2!=0)
printf
(
"%d "
,b[i]);
}
printf
(
"\n"
);
}
return
0;
}