最大的两个数(求两次最大值)

来源:互联网 发布:java判断质数的算法 编辑:程序博客网 时间:2024/06/06 19:33


链接:https://www.nowcoder.com/practice/7385949943264a9fa4348cbd43e6e00c?tpId=40&tqId=21546&tPage=11&rp=11&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
来源:牛客网

题目描述

    输入一个四行五列的矩阵,找出每列最大的两个数。 
输入描述:
    输入第一行包括一个整数n(1<=n<=1000),接下来的四行每行包括五个整数。代表一个四行五列的矩阵,矩阵元素全部是整数。


输出描述:
    可能有多组测试数据,对于每组数据,按照样例输出的格式将每列最大的两个数输出,如果最大的两个数中的一个数在这一列中有多个相同的值,则行值取行值小的那一个。    输出时要保留原矩阵的行列顺序,即在原矩阵中行值小的,在输出矩阵中的行值依然小。

输入例子:
11  2   4  9  8-1  4  9  8  812  9  8  7  07   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 1000010using 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;}


1 0
原创粉丝点击