FOJ–1705–眾數問題

來源:互聯網
上載者:User

 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 />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.