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

Problem 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
 
import java.util.Scanner;


public class Main {

	/**
	 * 
	 * @param nums
	 * @return
	 */
	private static double average(double [] nums){
		double max = nums[1];
		double min = nums[1];
		double sum = 0.0d;
		for (int i = 1; i < nums.length; i++) {
			if (nums[i] > max) {
				max = nums[i];
			}
			if (nums[i] < min) {
				min = nums[i];
			}
			sum += nums[i];
		}
		return (sum - max - min)/(nums.length -3);
	}
	
	private static int getNumber(double [] nums,double avrg){
		int number = 1;
		double gap = Math.abs(nums[1] - avrg);
		for (int i = 1; i < nums.length; i++) {
			double temp = Math.abs(nums[i] - avrg);
			if (gap > temp) {
				gap = temp;
				number = i;
			}
		}
		return number;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner scanner = new Scanner(System.in);
		int  N = scanner.nextInt();
		while (N != 0) {
			double avrg = 0.0d;
			double []pi = new double[N+1];
			for (int i = 1; i < pi.length; i++) {
				pi[i] = scanner.nextDouble();
			}
			avrg = average(pi);
			System.out.println(getNumber(pi, avrg));
			N = scanner.nextInt();
		}
		scanner.close();     
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值