很简单的一道题,先把选票从小到大排序 ,再片段当前选票与前一个选票是否相等,如果不相等,则说明有另一个新的选举人,选举人个数++,再将该选举人记录下来,然后不管相等不相等都要将当前选举人的票数++,最后统计哪些人票数> n / 4,输出即可。
坑点:
,而我输出时是以空格隔开的!导致我只得了30分!
惨痛的经历:
代码:
#include <bits/stdc++.h>
using namespace std;
int n,a[10005],b[10005],c[10005],j,flag = 0;
int main()
{
cin>>n;
for(int i = 1; i <= n; i++) cin>>a[i];
sort(a + 1,a + n + 1);
for(int i = 1; i <= n; i++)
{
if(a[i] != a[i - 1])//如果相邻的2票不同
{
j++;//选举人个数++
c[j] = a[i];//记录该选举人
}
b[j]++;//该选举人票数++
}
double x = n / 4;
for(int i = 1; i <= n; i++)
{
if(b[i] > x)
{
flag = 1;//标记
printf("%lld\n",c[i]);
}
}
if(flag == 0) printf("No such person.");//如果没被标记,说明没人获奖
return 0;
}