1. 将矩阵存放于二维数组中,遍历数据,按行遍历,但处理的时候是按列处理;
2. 设定两个最大值,只要出现比第二大的数都更大数就替换,每次替换的肯定是第二大的数;
3. 注意需要按行保持输出顺序,即最大的两个数需要根据行号顺序输出;
1 #include<iostream>
2 #include<string>
3
4 using namespace std;
5
6 const int r=4, c=5;
7 int matrix[r][c];
8 int maxn[c][2];
9 int startNum;
10
11
12 void init() {
13 for(int i=0; i<c; i++) {
14 //int: 32位, 1000...00 为负的最大, 即int表示的最小数值
15 maxn[i][0] = maxn[i][1] = 0x80000000;
16 }
17 }
18
19
20 //寻找最大和次大值
21 void findMaxNum(int row, int column) {
22 for(int k=0; k<column; k++) {
23 for(int i=0; i<row; i++) {
24 //处理对应的列
25 int temp = matrix[i][k];
26 int minNum = min(maxn[k][0], maxn[k][1]);
27 int maxNum = max(maxn[k][0], maxn[k][1]);
28 //每次只替换一个, 所以只有高于第二大值即可保留
29 if(temp > minNum) {
30 //不管替换哪个, 原来最大的数肯定保留, 而且顺序还在前面
31 maxn[k][0] = maxNum;
32 //新来的不管最大还是第二大, 都得排后面
33 maxn[k][1] = temp;
34 }
35 }
36 }
37 }
38
39
40 void solve(int row, int column) {
41 //4*5矩阵数据读取
42 for(int i=0; i<row; i++) {
43 for(int k=0; k<column; k++) {
44 if(!i && !k) {
45 matrix[i][k] = startNum;
46 }else {
47 cin>> matrix[i][k];
48 }
49 }
50 }
51 //挑选每一列的最大值和次大值
52 findMaxNum(row, column);
53 for(int i=0; i<2; i++) {
54 for(int k=0; k<column; k++) {
55 if(k) cout<< " ";
56 cout<< maxn[k][i];
57 }
58 cout<< endl;
59 }
60 }
61
62
63 int main() {
64 while(true) {
65 //初始化
66 init();
67 if(cin>> startNum) {
68 solve(4, 5);
69 }else {
70 break;
71 }
72 }
73
74 return 0;
75 }
原文:https://www.cnblogs.com/Lunix-touch/p/12333964.html