1. 程式人生 > >CSU2179: 找眾數

CSU2179: 找眾數

put while printf pro rst class include 一個 highlight

Description

由文件給出N個1到30000間無序數正整數,其中1≤N≤10000,同一個正整數可能會出現多次,出現次數最多的整數稱為眾數。求出它的眾數及它出現的次數。

Input

輸入文件第一行是正整數的個數N,第二行開始為N個正整數。

Output

輸出文件有若幹行,每行兩個數,第1個是眾數,第2個是眾數出現的次數。

Sample Input

12
2  4  2  3  2  5  3  7  2  3  4  3

Sample Output

2 4
3 4

題意:很好理解,就是找到出現次數最多的個數和對應的值。桶排一下就行。我這利用map的思想,先把所有出現的值和對應的個數存儲起來,然後遍歷找到最大的次數,再遍歷一下找到其值就可以了。


#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
const int maxn=1005;
int n,T;
map<int,int>m;
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        int x;
        while(n--)
        {
            scanf("%d",&x);
            if(m.count(x)==0)
                m[x]=1;
            else
                m[x]++;
        }
        int ans=0;
        map<int,int>::iterator iter;
        iter=m.begin();
        while(iter!=m.end())
        {
            ans=max(ans,iter->second);
            iter++;
        }
        iter=m.begin();
        while(iter!=m.end())
        {
            if(ans==iter->second)
                printf("%d %d\n",iter->first,iter->second);
            iter++;
        }
    }
    return 0;
}


/**********************************************************************
	Problem: 2179
	User: therang
	Language: C++
	Result: AC
	Time:8 ms
	Memory:2424 kb
**********************************************************************/

  

CSU2179: 找眾數