描述
所謂眾數,就是對於給定的含有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