首页 > 代码库 > 最大的两个数

最大的两个数

最大的两个数

题目描述:

    输入一个四行五列的矩阵,找出每列最大的两个数。

输入:

    输入第一行包括一个整数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 
提示:

每个数字后面都要输出一个空格

 

Code:
#include <iostream>#include <algorithm>#include <vector> using namespace std; int main(){    int arr[6][6];    int n;    while(cin>>n){        while(n--){            for(int i=1;i<=4;++i){                for(int j=1;j<=5;++j){                    cin>>arr[i][j];                }            }            int first,second;            vector<int> tmpVec;            vector<int> ansVec;            for(int i=1;i<=5;++i){                tmpVec.clear();                for(int j=1;j<=4;++j){                   tmpVec.push_back(arr[j][i]);                }                sort(tmpVec.begin(),tmpVec.end());                first=tmpVec[3];                second=tmpVec[2];                bool notFoundFirst=false;                bool notFoundSecond=false;                int index;                for(int j=1;j<=4;++j){                    if(arr[j][i]==first||arr[j][i]==second){                        ansVec.push_back(arr[j][i]);                        if(arr[j][i]==first){                            notFoundFirst=true;                        }else{                            if(arr[j][i]==second){                                notFoundSecond=true;                            }                        }                        index=j;                        break;                    }                }                if(notFoundFirst==true){                    for(int j=index+1;j<=4;++j){                        if(arr[j][i]==second){                            ansVec.push_back(arr[j][i]);                            break;                        }                    }                }                if(notFoundSecond==true){                    for(int j=index+1;j<=4;++j){                        if(arr[j][i]==first){                            ansVec.push_back(arr[j][i]);                            break;                        }                    }                }            }            cout<<ansVec[0]<<" "<<ansVec[2]<<" "<<ansVec[4]<<" "<<ansVec[6]<<" "<<ansVec[8]<<" "<<endl;            cout<<ansVec[1]<<" "<<ansVec[3]<<" "<<ansVec[5]<<" "<<ansVec[7]<<" "<<ansVec[9]<<" "<<endl;        }    }    return 0;} /**************************************************************    Problem: 1200    User: lcyvino    Language: C++    Result: Accepted    Time:40 ms    Memory:1520 kb****************************************************************/

 

 

最大的两个数