コンピュータ上のPubMed再テストマシンの問題 - 二大多数(華中科技大学)

 

 

アイデア:

  1.マトリックスは、行を横断する、データを介して、二次元配列に格納されているが、処理時間がカラムによって処理されます。

  2セットは、二つの最大値は、限り、交換するための第2の最大数よりも大きい数があるので、各置換は確かに二番目に大きい数です。

  配列が出力行を維持するために必要なことに留意されたい、すなわち、出力ライン数の最大数は、2つのシーケンスを必要とします。

C ++コード:

  

 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 }

 

おすすめ

転載: www.cnblogs.com/Lunix-touch/p/12333964.html