500W考生选出前200W名问题

本文介绍了一种算法,用于从500万名高考学生的成绩中筛选出排名前40%的学生。该算法首先统计各分数段的人数,再确定前40%的分数线,最后根据分数线筛选出符合条件的学生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

500W名学生参加高考,最高分是700分,如何选出排名前40%?

这是一道面试题,下面给出我的解法。没有验证,很可能存在错误,: -)

假设500W名考生的分数保存在一个数组scores[]中,我们把排名在前40%的考生的信息,放在数组array[]中

typedef struct

{

char name[20];

int score;

} Info;

void func(Info scores[], Info array[],long n=5000000)

{

int b[701];

int i=0;

for(i=0; i<701; i++)

{

b[i]=0;

}

for(i=0; i<n; i++) // 得到分数位0,1,...,的学生的个数

{

b[scores[i].score]++;

}

long num=b[700];

i=700;

while(num<2000000) // 得到第2000000名考生的分数i

{

num+=b[--i];

}

int k=0;

for(int j=0; j<5000000; j++)

{

if(scores[j].score>=i)

{

array[k++]=scores[j];

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值