1. 程式人生 > >演算法題,輸入一個矩陣,輸出每一列最大的兩個數

演算法題,輸入一個矩陣,輸出每一列最大的兩個數

#include <iostream>
using namespace std;

void search(int a[][5] , int n){  //一個5行5列的矩陣
        int max[2][5];   //分別表示前一個最大的數和後一個最大的數
        int index[2];
        index[0] = index[1] = 0;  //用來記錄兩個最大數的索引
        for(int i=0;i<5;i++){
                //對每一列都要找那個數
                max[0][i] = a[0][i];
                max[1][i] = a[0][i];
                index[0] = index[1] = 0;
                for(int j=1;j<n;j++){
                        //遍歷每一行
                        //max[0]記錄次大的數
                        //max[1]記錄最大的數
                        if(a[j][i] > max[0][i] && a[j][i] > max[1][i]){
                                if(index[1] != 0){   //這個時候要先把max[1]的值給max[0]
                                        max[0][i] = max[1][i];
                                        index[0] = index[1];
                                }
                                max[1][i] = a[j][i];
                                index[1] = j;
                        }
                        else if(a[j][i] > max[0][i]){
                                //這個時候要把max[1]的值給max[0]

                                max[0][i] = a[j][i];
                                index[0] = j;
                        }
                }
                //接下來判斷哪個行號大,大的在下面
                if(index[0] > index[1]){   //交換max的值
                        int temp = max[0][i];
                        max[0][i] = max[1][i];
                        max[1][i] = temp;
                }
        }
        for(int i=0;i<5;i++)
                cout<<max[0][i]<<" ";
        cout<<endl;
        for(int i=0;i<5;i++)
                cout<<max[1][i]<<" ";
        cout<<endl;
}

int main(){
        int a[4][5];
        for(int i=0;i<4;i++)
                for(int j=0;j<5;j++)
                        cin>>a[i][j];
        search(a,4);
}

執行結果: