题目描述
输入一个四行五列的矩阵,找出每列最大的两个数。
输入描述:
输入第一行包括一个整数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
AC code:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<map>
#include<math.h>
#include<string.h>
#include<queue>
#include<vector>
#include<set>
#define LL long long
#define exp 1e-9
#define MAXN 1000010
using namespace std;
int a[5][6],b[3][6];
int main()
{
// freopen("D:\\in.txt","r",stdin);
int T,i,j,m1,m1i,m2,m2i,order;
while(scanf("%d",&T)!=EOF)
{
while(T--)
{
for(i=1;i<=4;i++)
{
for(j=1;j<=5;j++)
{
scanf("%d",&a[i][j]);
}
}
for(j=1;j<=5;j++)
{
m1=m2=-9999999;
m1i=m2i=0;
for(i=1;i<=4;i++)
{
if(m1<a[i][j])
{
m1=a[i][j];
m1i=i;
}
}
for(i=1;i<=4;i++)
{
if(m2<a[i][j]&&i!=m1i)
{
m2=a[i][j];
m2i=i;
}
}
if(m1i<m2i)
{
b[1][j]=m1;
b[2][j]=m2;
}
else
{
b[1][j]=m2;
b[2][j]=m1;
}
}
for(i=1;i<=2;i++)
{
for(j=1;j<=5;j++)
{
printf("%d ",b[i][j]);
}
puts("");
}
}
}
return 0;
}