九度 1057 众数

题目来源:http://ac.jobdu.com/problem.php?pid=1057

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

struct Node
{
    int num;
    int kcount;
    Node()
    {
        num = 0;
        kcount = 0;
    }
};

int main()
{
    int i, a, maxn, iNum;
    Node arr[21];
    while(~scanf("%d", &a))
    {
        memset(arr, 0, sizeof(arr));
        arr[a].kcount = 1;
        maxn = 1;
        iNum = a;
        for(i = 1; i < 20; ++i)
        {
            scanf("%d", &a);
            arr[a].kcount++;
            if(arr[a].kcount == maxn)//如果众数存在相同,则找出权值最小的
            {
                if(a < iNum)
                    iNum = a;
            }
            else if(arr[a].kcount > maxn)//找出众数
            {
                iNum = a;
                maxn = arr[a].kcount;
            }
        }
        printf("%d\n", iNum);
    }
    return 0;
}

map方法,同样道理,一个简单的映射。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>

using namespace std;

int main()
{
    map <int, int> NumTime;
    int a, i, iNum, maxn;
    while(~scanf("%d", &a))
    {
        NumTime.clear();
        NumTime[a]++;
        iNum = a;
        maxn = 1;
        for(i = 1; i < 20; ++i)
        {
            cin>>a;
            NumTime[a]++;
            if(NumTime[a] == maxn)
            {
                if(a < iNum)
                    iNum = a;
            }
            else if(NumTime[a] > maxn)
            {
                maxn = NumTime[a];
                iNum = a;
            }
        }
        printf("%d\n", iNum);
    }
    return 0;
}


你可能感兴趣的:(map)