问题描述
输入
输入有多组测试例。
对每个测试例,第一个数字是N(0<N<1000),表示气球的数量。接下来N行,每行是一个气球的颜色,由小写字母构成的字符串表示,长度不超过15个。当N=0时,表示输入结束。
输出
对每个测试例输出一行,是表示最受欢迎的题目的气球颜色。
输入输出样例
输入样例 | 输出样例 |
---|---|
5 | red |
green | |
red | |
blue | |
red | |
red | |
3 | pink |
pink | |
orange | |
pink | |
0 |
问题分析
要输入气球颜色,需要定义字符串变量s;
要输入气球总数,需要定义整型变量n;
由于要计数,还要记录气球的颜色,我们采用STL中的map作为数据类型;
最终还要输出最多气球的颜色,我们要有个中间变量max,记录最大值;
要遍历map,我们需要一个迭代器变量point;
要记录最大值所在的map元素位置,我们还需要辅助迭代器变量ioc;
设计变量
string s; //输入气球颜色的辅助变量
int n; //输入气球总数的辅助变量
map<string,int> balloon; //记录气球的map
int max = 0; //颜色最多的气球个数
map<string,int>::iterator point,ioc;//两个迭代器变量
思路分析
1、先输入气球总数,根据总数输入气球颜色;
2、将气球颜色作为键值,执行balloon[s]++;
3、输入完成后,迭代map,计算出最大值和最大值所在位置;
4、输出,并重复以上步骤直到输入数字0结束。
完整代码
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
int n;
while(cout<<"请输入气球总数(输入0即退出)n="&&cin >> n&& n > 0){
map<string,int> balloon;
int max = 0;
string s;
for(int i=0;i < n;i++){
cin >> s;
balloon[s]++;
}
map<string,int>::iterator point,ioc;
for(point = balloon.begin();point != balloon.end();point ++){
if(max < point->second){
max = point->second;
ioc = point;
}
}
cout<<"color:"<<ioc->first<<"\tnumber:"<<ioc->second<<endl;
}
return 0;
}