时间限制: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; } /************************************************************** Problem: 1200 User: kaoyandaren123 Language: C Result: Wrong Answer ****************************************************************/