气球颜色最多

来源:互联网 发布:淘宝店铺首页定时发布 编辑:程序博客网 时间:2024/04/28 18:29
  1. 题目
      在放气球比赛中,有很多不同颜色的气球,现在要统计哪种颜色的气球最多。
  2. 输入描述
      输入数据包含多组测设案例。每组测设案例由N(0N1000)打头,N表示分发的气球的总数目。接下去的N行每行包含一种颜色。气球的颜色是一个多达15个小写字母的单词。
      一个测设案例的N=0表示输入结束。
  3. 输出描述
      对于每个测设案例,把数目最多的那种颜色打印在单独一行上。每个测设案例都仅有一种颜色是最多的。
  4. 输入样例
    5
    green
    red
    blue
    red
    red
    3
    pink
    orange
    pink
    0
  5. 输出案例
    red
    pink
      解答:本题实际上就是统计每种颜色出现的数量,不好的算法可能使编程实现起来比较困难且可能超时。
      使用映照容器比较好实现,速度也快。键值是气球颜色的单词,映照数据则是该种颜色气球出现的次数,即Map<Color, Number>。
      先把数据统计到Map<Color,Number>中,在搜索出Map中<..,Number>最大的元素,最后把颜色<Color,..>打印出来。代码如下:
      //ball.cpp  
#include <fstream>#include <iostream>#include <string>#include <map>using namespace std;int main(){    //ifstream cin("aaa.txt");    map<string, int> m;    int n, i;    string s;    map<string, int>::iterator it, it2;    while (cin>>n)    {        if (n == 0) break;        m.clear();        for (i = 0; i < n;i++)        {            cin >> s;            //在映照容器中查找键值            if (m.find(s) != m.end())                m[s] = m[s] + 1;            else                m[s] = 1;        }        it2 = m.begin();        for (it = m.begin(); it != m.end();it++)        {            //注意,映照容器中,元素的键值为it->first            //元素映照值为it->second            if (it2->second < it->second)                it2 = it;        }        cout << it2->first << endl;    }    return 0;}

效果如下:

这里写图片描述

0 0
原创粉丝点击