2017.1.18【初中部 】普及组模拟赛C组 最佳裁判 题解

原题:

http://172.16.0.132/junior/#contest/show/1368/1

题目描述:

过去的2012年对小x来说是很悲催的一年,失恋了12 次,每次都要郁闷1个月。好在小x是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小x就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛。
小x最喜欢看的是跳水,主要原因也是因为这个项目有中国人参加,而且中国队员获胜的几率很大,一般不会再给自己添堵,不然何谈看体育疗情伤呢。跳水项目的一个重要环节就是裁判打分,小x他们有时候会觉得某个裁判不公平,是不是有意在压中国队员的分数。于是每当一个队员跳水完毕,他们几个也像电视上的裁判那样给队员打分,并且规定,谁的分数和最终得分最接近谁就是他们当中的最佳裁判,现场奖励啤酒一杯!
其中,最终得分是这样计算的:N 个人打分,去掉一个最高分,去掉一个最低分,然后剩余分数相加,再除以 N-2 即为最终得分。凭借“看体育疗情伤”而练就的专业体育知识,小x几乎每局必胜,这一夜,小x注定要烂醉如泥了……

输入:

输入包含多组测试数据。
每组测试数据首先是一个整数 N,表示裁判的人数,然后接着是 N 个实数,表示 N 个裁判的打分 Pi
N 为 0 时表示结束输入。

输出:

请计算并输出最佳裁判的编号,每组数据输出占一行。若有多人并列最佳裁判,只要求输出编号最小的那个。
特别说明:裁判编号按照打分的顺序从 1 开始,依次类推,最后一人编号为 N。

样例输入:

5 8.3 9.2 8.7 8.9 9.0
0

样例输出:

4

数据范围限制:

其中,5 <= N <= 20,0 <= Pi <= 10。

分析:

先求出最终得分,然后枚举pi求出相差最小的编号;

实现:

var
  n,i,minn:longint;
  max,min,ans:real;
  p:array[0..23]of real;
begin
  assign(input,'judgers.in');reset(input);
  assign(output,'judgers.out');rewrite(output);
  while not eof do
  begin
    ans:=0; max:=0; min:=maxlongint; minn:=0;
    fillchar(p,sizeof(p),0);
    read(n);
    if n=0 then break;
    for i:=1 to n do 
    begin 
      read(p[i]);
      ans:=ans+p[i];
      if p[i]>max then begin max:=p[i]; end;
      if p[i]<min then begin min:=p[i]; end;
    end;
    ans:=(ans-max-min)/(n-2);
    min:=maxlongint; minn:=0;
    for i:=1 to n do 
      if abs(ans-p[i])+0.00001<min then
      begin
        min:=abs(ans-p[i]);
        minn:=i;
      end;
    writeln(minn);
  end;
  close(input);close(output);
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值