题解 | #最大的两个数#
最大的两个数
https://www.nowcoder.com/practice/7385949943264a9fa4348cbd43e6e00c
牛客网有个很无语的地方就是明明有多组测试用例,但如果用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"); } }