描述
输入一个四行五列的矩阵,找出每列最大的两个数。
输入描述:
每个用例包含四行,每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。
输出描述:
可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。 输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。
示例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
复制
示例2
输入:
27 44 76 14 44 91 49 37 16 90 35 58 44 67 84 15 22 90 27 39
输出:
91 49 76 67 90 35 58 90 27 84
代码:
#include <iostream>
#include<algorithm>
#include<map>
using namespace std;
int main() {
int num[4][5];
for(int i=0;i<4;i++){
for(int j=0;j<5;j++){
cin>>num[i][j];
}
}
int a[5]; //记录每列最大两个数的上数(行小)
int b[5];//记录每列最大两个数的下数(行大)
int c[4]; //记录每列元素
for(int j=0;j<5;j++){
map<int,int>mp;
for(int i=0;i<4;i++){
c[i]=num[i][j];
mp[c[i]]=i; //键值对记录对应数的行数
}
sort(c,c+4);
if(mp[c[3]]>mp[c[2]]){ //第一大数在第二大数的下方
a[j]=c[2];
b[j]=c[3];
}else{
a[j]=c[3];
b[j]=c[2];
}
}
for(int i=0;i<5;i++) cout<<a[i]<<" "; //先输出a
cout<<endl;
for(int j=0;j<5;j++) cout<<b[j]<<" "; //再输出b
return 0;
}