C - 小Q系列故事——最佳裁判

找最佳裁判,这个题我WR7次,TLE一次,尝试了二分法,排序,未果。后来直接查找,找距离最短的那个裁判(这个非常重要)才得以AC,而且时间是0ms。其实排序那里应该是有个距离问题没注意到,就是最短距离的前后编号在原始编号的大小。


Description

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

Input

  输入包含多组测试用例。 
  每组测试用例首先是一个整数N,表示裁判的人数,然后接着是N个实数,表示N个裁判的打分Pi,N为0时结束输入。 
   [Technical Specification]
  5 <= N <= 20 
  0<=Pi<=10
 

Output

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

Sample Input

5 8.3 9.2 8.7 8.9 9.0
0
 

Sample Output

4



下面是是我的代码:


#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n, ans;
double grade[20], allg, ming, maxg, aveg, space;
int main()
{
    while(scanf("%d", &n)!=EOF && n)
    {
        maxg=0;
        ming=10;
        allg=0;
        for(int i=0;i<n;i++)
        {
            scanf("%lf", &grade[i]);
            allg+=grade[i];
            maxg=maxg>grade[i]?maxg:grade[i];
            ming=ming<grade[i]?ming:grade[i];
        }
        aveg=(allg-maxg-ming)/(n-2);
        space=20;
        for(int j=0;j<n;j++)
        {
            if(abs(grade[j]-aveg)<space)        //注意距离
            {
                ans=j+1;
                space=abs(grade[j]-aveg);
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}