排序——分数线划定

洛谷 P1068 分数线划定
题目描述
世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成
绩。

题目分析
巨简单的排序程序,其实在一定程度上接近模拟
首先排序(废话)
然后将m乘以1.5加一个trunc(trunc函数,取出整数部分——向下取整)
从改变后的m开始,往后搜寻重复的(即分数与其相同的),逐步增加m,防止漏掉同分者
最后输出就行啦!

type
   score=record s,n:longint; end;
var
  a:array[1..5000]of score;
  n,m,i:longint;
procedure qs(h:longint);
var
  i,j:longint;
  temp:score;
begin
  for i:=1 to h-1 do
   for j:=i+1 to h do
    if (a[i].s<a[j].s)or(a[i].s=a[j].s)and(a[i].n>a[j].n) then
     begin
       temp:=a[i];a[i]:=a[j];a[j]:=temp;
     end;
end;

begin
  readln(n,m);
  m:=trunc(m*1.5);
  for i:=1 to n do
   readln(a[i].n,a[i].s);
  qs(n);
  while a[m+1].s=a[m].s do
   inc(m);
  writeln(a[m].s,' ',m);
  for i:=1 to m do
   writeln(a[i].n,' ',a[i].s);
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值