* 问题说明 :
在歌星大奖赛中,有 10 个评委为参赛的选手打分,分数为 1~100 分。选手最后得分为:去掉一个最高分和一个最低分后其余 8 个分数的平均值。请编写一个程序实现。
* 思考题
题目条件不变,但考虑同时对评委评分进行裁判,即在 10 个评委中找出最公平 ( 即评分最接返平均分 ) 和最不公平 ( 即与平均分的差距最大 ) 的评委,程序应该怎样实现?
* 问题分析与算法设计 :
这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。
/* * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All right reserved. * * Created on Mar 17, 2011 4:36:59 PM * * http://jarg.iteye.com/ * */ // Contributors: Jarg Yee <yeshaoting@gmail.com> import java.io.*; import static java.lang.Math.abs; import java.util.ArrayList; import java.util.List; import static java.lang.System.out; /* * TODO 歌星大奖赛 */ public class SingerCompetition { private static final int[] VALUE = {90,91,93,94,90,99,97,92,91,95}; private static final int NUM = VALUE.length; // 评委人数 /** local params */ /** 最大分,最小分 */ private static int max = 0,min = 100; /** 总分,平均分 */ private static int sum = 0,avg = 0; /** 最小,最大差分 */ private static int gap1 = 100,gap2 = 0; /* 最公平,最不公平评委(可能有多个人) */ private static List fairList = new ArrayList(),unfairList = new ArrayList(); /** * TODO for debugging. */ public static void main(String[] args) { extremNUM(); /* 求极值分 */ evaluation(); /* 评价评委 */ } /* 求极值分 */ public static void extremNUM() { for(int i=0; i<NUM; i++) { if(VALUE[i]>max) max = VALUE[i]; if(VALUE[i]<min) min = VALUE[i]; sum = sum + VALUE[i]; // 求总分 out.println("Input NUMber " + i + ":" + VALUE[i]); } sum = sum - max - min; // 去除最高分和最小分 avg = sum/(NUM-2); out.println("Canceled max score:" + max); out.println("Canceled min score:" + min); out.println("Average score:" + avg); } /* 评价评委 */ public static void evaluation() { for(int i=0; i<NUM; i++) { if(abs(VALUE[i] - avg)<=gap1) { if(abs(VALUE[i] - avg)!=gap1) fairList.clear(); gap1 = abs(VALUE[i] - avg); fairList.add("" + i); } if(abs(VALUE[i] - avg)>=gap2) { if(abs(VALUE[i] - avg)!=gap2) unfairList.clear(); gap2 = abs(VALUE[i] - avg); unfairList.add("" + i); } } out.print("Most fair judges:"); for(int i=0;i<fairList.size();i++) out.print("\t" + fairList.get(i)); out.println(); out.print("Most unfair judges:"); for(int i=0;i<unfairList.size();i++) out.print("\t" + unfairList.get(i)); out.println(); } }