牛客网有个很无语的地方就是明明有多组测试用例,但如果用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");
}
}

京公网安备 11010502036488号