(比赛)C

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

Time Limit:200MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

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
 
//比赛除了练习过的,就做出这个了,纪念一下
//题目很简单,如果排序的话有个坑,就是题目是要输出最小的编号的,而不是数组编号最小的,如果有几个最佳裁判,而编号大的在前面,就会出错
 
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <math.h>
 5 
 6 struct people
 7 {
 8     int num;
 9     double fen;
10 }person [21];
11 
12 using namespace std;
13 int main()
14 {
15     int N;
16     double all,temp,min;
17     int t;
18     int i,j,k;
19     while (scanf("%d",&N)&&N)
20     {
21         for (i=1;i<=N;i++)
22         {
23             scanf("%lf",&person[i].fen);
24             person[i].num=i;
25         }
26 
27         for (i=1;i<=N;i++)
28         {
29             k=i;
30             for (j=i+1;j<=N;j++)
31             {
32                 if (person[j].fen<person[k].fen)
33                 {
34                     k=j;
35                 }
36             }
37             if (k!=i)
38             {
39                 temp=person[k].fen;
40                 person[k].fen=person[i].fen;
41                 person[i].fen=temp;
42 
43                 t=person[k].num;
44                 person[k].num=person[i].num;
45                 person[i].num=t;
46             }
47         }
48         all=0;
49         for (i=2;i<=N-1;i++)
50             all+=person[i].fen;
51         all=all/(N-2);
52 
53         k=person[1].num;
54         min=fabs(all-person[1].fen);
55         for (i=1;i<=N;i++)
56         {
57             if (fabs(all-person[i].fen)<=min)
58             {
59                 if ((fabs(all-person[i].fen)==min)&&person[i].num<k)
60                 {
61                     k=person[i].num;
62                     min=fabs(all-person[i].fen);
63                 }
64                 else if (fabs(all-person[i].fen)<min)
65                 {
66                     k=person[i].num;
67                     min=fabs(all-person[i].fen);
68                 }
69             }
70         }
71         printf("%d
",k);
72     }
73     return 0;
74 }
View Code
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/haoabcd2010/p/5696202.html