HDoj 1004 Let the Balloon Rise

可紊 提交于 2020-02-01 16:23:00

Problem Description
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges' favorite time is guessing the most popular problem. When the contest is over, they will count the balloons of each color and find the result.

This year, they decide to leave this lovely job to you.

 

Input
Input contains multiple test cases. Each test case starts with a number N (0 < N <= 1000) -- the total number of balloons distributed. The next N lines contain one color each. The color of a balloon is a string of up to 15 lower-case letters.

A test case with N = 0 terminates the input and this test case is not to be processed.

 

Output
For each case, print the color of balloon for the most popular problem on a single line. It is guaranteed that there is a unique solution for each test case.

 

Sample Input
5
green
red
blue
red
red
3
pink
orange
pink
0

 

Sample Output
red
pink 

 

Author
WU, Jiazhi

Source
ZJCPC2004

 

 

个人题解:本道题简要意思就是给你一堆颜色序列,让你找出出现次数最多的那个颜色。   起初我想用哈希数组,二十六个英文字母作为键,统计颜色单词中首字母哪个出现的最多并记录下来,第二个字母谁出现的最多并记录下来。再利用统计好的字母按顺序进行搜索,搜索到了就对其颜色进行输出。例如:颜色序列是 pink ,red,pink,blue,brown。如此统计下来 首字母p出现频率最高,第二个字母出现频率最高,利用p和i按顺序搜索,搜索到pink,输出。       但是提交发现答案错误,推测可能是有些颜色首字母和第二个字母相同。

后来,看到了网上的方法,为每一个输入都设置配套一个数组(类似于哈希表,但是目前字符串-整型的c++哈希映射我还不会,故参考了网上的方法),每输入一个颜色时,都将其与前面已经输入过的颜色进行比较,如果相同,则在前面颜色键(即最早出现这个颜色的输入)上的值+1,统计过后,搜索哪个键上的值最大,取得最大值对应的键的下标,输出该下标下的颜色。

代码如下:

 

#include<stdio.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string ball[1000];
int num[1000];
int main()
{
    int n=0;
    while(scanf("%d",&n)!= EOF)
    {
        if(n==0)
            continue;
        for(int i=0;i<1000;i++)
        {
            ball[i]="";
            num[i]=0;
        }
        for(int i=0;i<n;i++)
        {
            cin>>ball[i];
            for(int j=0;j<i;j++)
            {
                if(ball[i]==ball[j])
                    num[j]++;
            }
        }
        int max= max_element(num, num+1000)-num;
        cout<<ball[max]<<endl;
    }
 } 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!