天天看點

考研機試:數學問題之衆數

題目描述

給定一個長度為N的非降數列,求數列中出現次數最多的數。

如果答案不唯一,輸出其中最小的數。

輸入格式

輸入資料第一行是一個整數T(1 <= T <= 100),表示測試資料的組數。

對于每組測試資料:

第一行是一個正整數N(1 <= N <= 100),表示數列長度。

第二行有N個整數,整數用空格隔開,所有整數都不超過105,表示這個數列。

輸出格式

對于每組測試資料,輸出一個整數。

輸入樣例

2

4

1 1 1 2

5

1 1 2 2 3

輸出樣例

1

1

題目分析

1、關于數組的建構

普通數組:

數組 1 1 1 2

下标 0 1 2 3

計數數組:

數組 0 3 1 0…

下标 0 1 2 3…

運用哈希思想,在數組中直接記錄元素出現的次數

2、數組初始化

memset(a, 0, sizeof(a));//将數組a初始化為0,第三個參數為數組a的長度

包含在<string.h>頭檔案中

數組初始化應該放在while循環中,每次對數組操作前都要初始化為0。

3、題目中有多組輸入測試資料,用while循環控制。

C:while(scanf("%d", &n) != EOF){…}

C++:while(cin >> n){…}**

注*:題目中對數組長度的要求是105,定義數組的時候可以稍微開的大一點 int a[100005];

代碼

#include <iostream>
#include <string.h>
using namespace std;

int main(){
    int T, N, max,tmp,num;
    int a[100005];

    cin >> T;
    while(T--){
        cin >> N;
        memset(a, 0, sizeof(a));//數組初始化為0
        /*
        for(int i = 0; i<100005; i++){
            a[i] = 0;
        }
        */
        for(int i = 0; i<N; i++){
            cin >> num;
            a[num] = a[num] + 1;
        }
        max = 0;//初始化
        for(int j = 0; j<100005; j++){
            if(a[j] > max){
                max = a[j];
                tmp = j;
            }
        }
        cout << tmp << endl;
    }
    return 0;
}

           

運作結果

考研機試:數學問題之衆數

繼續閱讀