任何疑问、意见、建议请留言公众号:一航代码
皮皮在做一个调查,0到9的10个数字中大家最喜欢哪一个?他询问了N个人,用这些人的方法告诉他的数字组成了一个N位的整数。然后皮皮就去给女朋友打电话了,他叫你帮忙统计一下,这个整数中哪一个数字出现最多。
输入格式:
输入数据有多组,每组占一行,由一个N为的整数构成(皮皮急着打电话,没有告诉你N是多少,只告诉这个数字小于10的1000次方)。
输出格式:
对于每组输入数据,输出一行,对应一个要求的答案(答案为0~9之间的一个数字,如果有多个数字出现次数一样多的情况,输出最小的数字)。
输入样例:
1234567891
11122333
1235564
输出样例:
1
1
5
解决方法:
(1)算法思想:
注意,该数字的最大范围是10的1000次方,故不能用整数类型来存储。
须用字符串表示数字,遍历字符串,将数字出现次数保存在计数数组中。
(2)代码实现:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
//公众号@一航代码
int main()
{
string s;
while (cin >> s)
{
vector<int> num(10, 0);
int max_num = 0, n = 10;
for (int i = 0; i < s.size(); i++)
{
int t = s[i] - '0';
num[t]++;
if (num[t] > max_num) //若当前数字出现次数最大
{ //更新最大次数和数字
max_num = num[t];
n = t;
}
else if (num[t] == max_num)//如果当前数字出现次数和最大次数相等
{ //保留数字更小的那个
if (t < n)
{
n = t;
}
}
}
cout << n << endl;
}
return 0;
}