给你n个数字,你需要找出出现至少(n+1)/2次的数字 现在需要你找出这个数字是多少?
Input
本题包含多组数据: 每组数据包含两行。 第一行一个数字N(1<=N<=999999) ,保证N为奇数。 第二行为N个用空格隔开的整数。 The input is terminated by the end of file.
Output
For each test case, you have to output only one line which contains the special number you have found.
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
提示
如果不排序,怎么做?
思路:排序for循环找连续(n+1)/2个相同的输出就行
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define inf 0x3f3f3f3f
int a[1000009];int h[100];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
memset(h,0,sizeof(h));
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
sort(a,a+n);int r=0;
int g=1;
for(int i=1;i<n;++i)
{
if(a[i] == a[i-1])
{
g++;
}
else{
g=1;
};
if(g == (n+1)/2)
{
h[r] = a[i];r++;
}
}
printf("%d",h[0]);
for(int i=1;i<r;++i)
{
printf(" %d",h[i]);
}
printf("\n");
}
return 0;
}