week12-A - 必做题 - 1

题目

给出n个数,zjm想找出出现至少(n+1)/2次的数, 现在需要你帮忙找出这个数是多少?

Input

本题包含多组数据:

每组数据包含两行。

第一行一个数字N(1<=N<=999999) ,保证N为奇数。

第二行为N个用空格隔开的整数。

数据以EOF结束。

Output

对于每一组数据,你需要输出你找到的唯一的数。

Sample Input

5

1 3 2 3 3

11

1 1 1 1 1 5 5 5 5 5 5

7

1 1 1 1 1 1 1

Sample Output

3

5

1

思路

用map记录每个数字对应的出现个数,在录入的同时判断该数字出现次数是否>=(n+1)/2,在满足时立刻输出,并将剩下的字符接收并抛弃。

错误

1、注意在for中break后可能会出现数据无法录全的情况
2、注意接收时只接收n个字符,故break之后要使i++才能继续用i计数录入的字符数。
3、注意接收的数字可能为long long类型

代码

#include<iostream>
#include<map> 
using namespace std;
int main()
{
    
    
	int n;
	while(scanf("%d",&n)!=EOF)
	{
    
    
		map<long long,int> num;
		int i=0; 
		long long tmp;
		for(i=0;i<n;i++)
		{
    
    
			cin>>tmp;
			num[tmp]++;
			if(num[tmp]>=(n+1)/2)
			{
    
    
				cout<<tmp<<endl;
				break;				
			}
		}
		i++;
		for(;i<n;i++)
			cin>>tmp;
}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/alicemh/article/details/106130491