【CCF】出現回数が最も多い数

1813 ワード

試験問題番号:
201312-1
試験問題名:
出現回数が最も多い数
時間制限:
1.0s
メモリの制限:
256.0MB
問題の説明:
問題は、与えられたn個の正の整数を記述し、それらの中で最も多く出現した数を探し出す.このような数が複数ある場合は、その中の最小の1つを出力します.入力フォーマット入力の最初の行には正の整数n(1≦n≦1000)が1つしかなく、数字の個数を表す.入力された2行目はn個の整数s 1,s 2,...,sn(1≦si≦10000,1≦i≦n)である.隣接する数はスペースで区切られています.出力フォーマットは、このn回のうち最も出現回数の多い数を出力する.このような数が複数ある場合は、その中の最小の1つを出力します.サンプル入力6 10 1 10 20 30サンプル出力10
問題解決の考え方:
この問題は直接mapで操作され、mapのkeyは正の整数であり、valueは配列に現れる回数である.ansは出現回数が最も多い正の整数を格納し、maxは出現回数が最も多い回数を記録するために使用され、for-eachはmapをループし、ある数の出現回数がmaxより大きい場合、出現回数が最も多いmaxと出現回数が最も多い正の整数ansを更新する.最後にansを出力すればいいです.
100点コード:
​#include 
using namespace std;

int main()
{
    map m;  //map key    ,value           
    int n;
    cin >> n;   //n    
    for (int i = 0; i < n; i++)   //                   
    {
        int temp;
        cin >> temp;
        m[temp]++;
    }
    int ans,max=0;   //ans              ,max           
    for(auto it:m)   //for-each    map
    {
        if(it.second > max)    //          max
        {
            max = it.second;   //         max
            ans = it.first;    //           
        }
    }
    cout << ans << endl;
    return 0;
}

——————————————2019.09.07更新——————————————————
#include 
using namespace std;
#define Up(i,a,b) for(int i = a; i <= b;i++)

int main()
{
    int n;
    cin >> n;
    map m;
    int ans,cnt = 0;
    Up(i,1,n)
    {
        int _;
        cin >> _;
        m[_]++;
        if(m[_] > cnt)
        {
            cnt = m[_];
            ans = _;
        }
        else if(m[_] == cnt)
        {
            ans = min(ans,_);
        }
    }
    cout << ans << endl;
    return 0;
}