ACM題目————STL練習之眾數問題


描述

所謂眾數,就是對於給定的含有N個元素的多重集合,每個元素在S中出現次數最多的成為該元素的重數,

多重集合S重的重數最大的元素成為眾數。例如:S={1,2,2,2,3,5},則多重集S的眾數是2,其重數為3。

現在你的任務是:對於給定的由m個自然數組成的多重集S,計算出S的眾數及其重數。

輸入
第一行為n,表示測試數據組數。(n<30)
每組測試的第一行是一個整數m,表示多重集S中元素的個數為m
接下來的一行中給出m(m<100)個不大於10萬的自然數
(不會出現不同元素出現的次數相同的情況,如:S={11,11,22,22,33,33})。
輸出
每組測試數據輸出一行,包含兩個數,第一個是眾數,第二個是其重數,中間以空格隔開。
樣例輸入
1
6
1 2 2 2 3 5
樣例輸出
    2 3
這些題其實很簡單,不用STL也能AC,但可以作為STL的入門題,練練手^_^
//Asimple
#include<iostream>
#include<cmath>
#include<map>
#include<algorithm>

using namespace std;
int T, n, num;

bool mycmp(const pair<int,int> p1, const pair<int,int> p2)
{
    return p1.second < p2.second ;
}

int main()
{
    cin >> T;
    while( T-- )
    {
        map<int,int> m;
        cin >> n;
        while( n-- )
        {
            cin >> num ;
            m[num] ++ ;
        }
        map<int,int>::iterator i=max_element(m.begin(), m.end(),mycmp);
        cout << i->first << " " << i->second << endl ;
    }

    return 0;
}

 

特別介紹下 max_element  介個函數。

max_element(m.begin(), m.end());

這個函數返回 m 的最大值,  這個m 可以使是向量,string,list,set,map等等,但是對於map來說,要寫一個比較函數,注明比較的是第一個值的大小還是第二個值大小,本題中,就是返回第二個值最大的元素。同理 就有min_element。也一樣。O(∩_∩)O


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM