HDU 1004 Let the Balloon Rise(map)

Description
给出一堆字符串,输出其中出现频率最高的串,保证解唯一
Input
多组用例,每组用例第一行输入串的个数n,之后n行每行一个字符串,以n=0结束输入
Output
对于每组用例,输出n个串中出现频率最高的一个串
Sample Input
5
green
red
blue
red
red
3
pink
orange
pink
0
Sample Output
red
pink
Solution
统计不同字符串的数目,可以用结构体做,但每次读入一个串都要枚举前面的串太麻烦,所以此处我用map做的,map第一个键值存字符串,第二个键值存串的出现次数,读入完后枚举所有map找到最大的第二键值,然后再枚举一遍找到最大第二键值对应的第一键值即为出现次数最多的串
Code

#include<cstdio>
#include<string>
#include<iostream>
#include<map>
using namespace std;
#define maxn 1010
int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        map<string,int>ball;
        string s;
        for(int i=0;i<n;i++)
        {
            cin>>s;
            ball[s]++;
        }
        int ans=-1;
        map<string,int>::iterator iter; 
        for(iter=ball.begin();iter!=ball.end();iter++)//找到最大的第二键值 
            if(iter->second >ans)
                ans=iter->second;
        for(iter=ball.begin();iter!=ball.end();iter++)//找到最大第二键值对应的第一键值 
            if(iter->second==ans)
                cout<<iter->first<<endl;
    }
    return 0;
}

你可能感兴趣的:(HDU 1004 Let the Balloon Rise(map))