http://acm.fzu.edu.cn/problem.php?pid=1705
給定含有n個元素的多重集合S,每個元素在S中出現的次數稱為該元素的重數。多重集S中重數最大的元素稱為眾數。
例如,S={1,2,2,2,3,5}。
多重集S的眾數是2,其重數為3。
現在給你一個已經排好序的集合S,讓你求出其眾數和重數。
輸入資料 (請使用標準輸入輸出,而不要讀寫檔案)
輸入只有一行,有一個整數n(1<=n<=100)開始,表示集合S中元素個數,接下來有n個由一個空格隔開的整數(-100~100), 為集合S的元素,元素從小到大或者從大到小給出。
輸出資料 (請使用標準輸入輸出,而不要讀寫檔案)
輸出一行二個整數X和Y,X表示眾數和Y為重數,用一個空格隔開。如果存在多個解,只需輸出值最小的眾數即可。
範例輸入與輸出
範例1:
輸入 輸出
6 1 2 2 2 3 5 2 3
範例2:
輸入 輸出
3 -1 -1 -1 -1 3
分析: 我們主要是要把數值和他出現的次數記住,所以使用map容器的話會變得簡單很多
代碼如下:
#include <stdio.h><br />#include <map><br />using namespace std;<br />int main()<br />{<br />int n;<br />double x;<br />map<double,int> p;<br />while(scanf("%d",&n)!=EOF)<br />{<br />while (n--)<br />{<br />scanf("%lf",&x);<br />if(p.find(x)==p.end()) //判斷是否存在<br />p[x]=1;//沒有則只出現一次<br />else<br />p[x]++;//存在的話則再已有的基礎上再加1<br />}<br />map<double,int>::iterator i,iend;<br />iend=p.end();<br />i=p.begin();<br />int max=(*i).second; //max表示次數<br />int num=(*i).first; //num表示數值<br />for(;i!=iend;i++)<br />{<br />if(max<(*i).second)<br />{<br />max=(*i).second;<br />num=(*i).first;<br />}<br />}<br />printf("%d %d/n",num,max);<br />p.clear();<br />}<br />return 0;<br />}