天天看點

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

樣例輸出:

4

資料範圍限制:

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

分析:

先求出最終得分,然後枚舉pi求出相差最小的編号;

實作:

var
  n,i,minn:longint;
  max,min,ans:real;
  p:array[..]of real;
begin
  assign(input,'judgers.in');reset(input);
  assign(output,'judgers.out');rewrite(output);
  while not eof do
  begin
    ans:=; max:=; min:=maxlongint; minn:=;
    fillchar(p,sizeof(p),);
    read(n);
    if n= then break;
    for i:= 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-);
    min:=maxlongint; minn:=;
    for i:= to n do 
      if abs(ans-p[i])+<min then
      begin
        min:=abs(ans-p[i]);
        minn:=i;
      end;
    writeln(minn);
  end;
  close(input);close(output);
end.