牛客网有个很无语的地方就是明明有多组测试用例,但如果用while(true)无限循环输出的结果是错的,只好把它删掉。

#include <iostream>
#include <cstdio>
int main(){
        int arr[5][6] = {0};//存储矩阵
        int res[3][6] = {0};//结果矩阵
        for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 5; ++j) {
                scanf("%d",&arr[i][j]);
            }
        }
        //先遍历列,后遍历行
        for (int j = 0; j < 5; ++j) {
            //记录最大的两个数
            int first = INT32_MIN;
            int second = INT32_MIN;

            int first_row = 0,second_row = 0;//记录最大的两个数的行号
            for (int i = 0; i < 4; ++i) {
                if(arr[i][j]>first){//如果该数比最大数大,那么最大数变成该数,次最大数变成刚开始的最大数
                    int row = first_row;
                    first_row = i;
                    second_row = row;
                    int temp = first;
                    first = arr[i][j];
                    second = temp;
                }
                else{//如果该数小于最大数,那么就要看它是否大于次最大数,不用考虑等于次最大数的情况,因为题干要求取行号最小的
                    if(arr[i][j]>second){
                        second_row = i;
                        second = arr[i][j];
                    }
                }
            }
            if(first_row<second_row){//行号小的放在前面
                res[0][j] = first;
                res[1][j] = second;
            }
            else{
                res[0][j] = second;
                res[1][j] = first;
            }
        }
        for (int i = 0; i < 2; ++i) {
            for (int j = 0; j < 5; ++j) {
                printf("%d ",res[i][j]);
            }
            printf("\n");
        }
}