1. 程式人生 > >SDNUOJ 1321眾數

SDNUOJ 1321眾數

Description
給出n個數,求這n個數的眾數。

眾數的定義是:是一組資料中出現次數最多的數值,叫眾數,有時眾數在一組數中有好幾個。

Input
第一行有個整數T,表示測試組數T<=10.

接下來有T個測試組,每個測試組的第一行有整數n,表示有n個數。

接下來1行有n個數,第i個數ai ,0<=ai<1000

n<=1000

Output
對於每個測試組,請把答案在一行中輸出,如果有多個眾數,則按照從小到大的順序把他們輸出。

Sample Input
1
5
3 3 2 2 4
Sample Output
2 3

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        int a[1005] = {};
        int num[1005] = {};
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        sort(a, a + n);
        int max_num = 0;
        int max_a;
        for(int i = 0; i < 1000; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(i == a[j])
                {
                    num[i] = upper_bound(a, a + n, i) - lower_bound(a, a + n, i);
                    if(num[i] > max_num)
                    {
                        max_num = num[i];
                        max_a = a[i];
                    }
                    break;
                }
            }
        }
        vector<int> vec;
        vec.clear();
        for(int i = 0; i < 1000; i++)
        {
            if(num[i] == max_num)
                vec.push_back(i);
        }
        reverse(vec.begin(), vec.end());
        while(!vec.empty())
        {
            cout << vec.back();
            if(vec.size() != 1)
                cout << " ";
            vec.pop_back();
        }
        cout << '\n';
    }
    return 0;
}