题目传送门 http://acm.hdu.edu.cn/showproblem.php?pid=1029
题意:首先给你一个数字n,然后输如n个数字,找出这些数字中出现此说大于n/2的数字……(我看杭电题目分类 说这题是dp就来做了,结果不是……)
这题是很基础的题,不过对新人来说 999999个数字 排序可能会超时 这里推荐用sort 排序,自己可以百度一下sort排序 超实用的排序方式……
见这个题我的第一想法就是排序,然后循环 找出现次数最多的数字,设置一个变量 cou计算出现的次数 如果cou>n/2那么就是这个数了 然后又想 只有一个数符合要求 这个数出现的次数一定大于n/2 ,只要a[i]==a[i+n/2] 那么a[i],就是要求的数字了;所以就出现了 现在这个代码;很惭愧,看了一下讨论区 假设定义的数组是a[],别人排序后直接输出a[n/2],感觉到 思路决定运算时间啊,符合要求的数比n/2大 ,所以排序后 它一定会出现在a[n/2]的地方的
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[1000100];
int main()
{
int i, n;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int cou;
for(i=0;i<=n/2;i++)
{
if(a[i]==a[i+n/2])
{
cou=i;
break;
}
}
printf("%d\n",a[cou]); //其实可以直接输出a[i]的 但是习惯了不习惯在输出里面随便用i
}
}