*问题说明:
在歌星大奖赛中,有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();
}
}