# 在一行中输入若干个数,以空格间隔,直到输入回车以结束。
这是我在做PTA的题的时候发现回车输入逻辑有先后区别,题目如下:
给出若干个正整数,请找出出现次数最多的数。
输入格式:
在一行中输入若干个数,以空格间隔(读入数的总个数不超过5000)。
输出格式:
输出出现次数最多的数(若答案不唯一,输出最小的那个)。
输入样例:
在这里给出一组输入。例如:
18 999 999 2100000000
输出样例:
在这里给出相应的输出。例如:
999
实现输入多个数据以空格隔开的第一种方式(推荐):
int main()
{
int num;
while(1)
{
cin>>num;
a[num]++;
if(getchar()=='\n')
break;
}
}
结合完整代码测试一下:
![](https://img-blog.csdnimg.cn/15c58bb34eed4ff6b1c604937b892cb4.png)
这是我在map容器输入始终不对时,对map的测试程序;而测试之前我写的正是下面的这种方式:
int num;
while(getchar()!='\n')
{
cin>>num;
a[num]++;
}
这种方式运行的结果会先读取第一个字符,导致程序不能完整读取第一个数据:
![](https://img-blog.csdnimg.cn/e9499eb56bd94c59bcdf355f69f87c27.png)
btw,给一下上述题目的代码:
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
int x;//暂存出入
map<int,int> mp;//map容器,int指向int
map<int,int> ::iterator it;//迭代器
while(cin>>x)
{
mp[x]++;
}
int min=mp.begin()->first;
for(it=mp.begin();it!=mp.end();it++)
{
if(it->second >= mp[min])
{
if(min>it->first) //输出较小的那个
min=it->first;
}
}
cout<<min;//输出出现最多并且较小的数
return 0;
}
本博客旨在记录自己的心得体会,如有不对,欢迎各位积极指出! 3Q3Q3Q