公平不公平 程序算出来

数字职场

本期挑战题目

一个神奇的八位数,乘以9的倍数,得到的都是一串相同的数字,你会编程推算出这个的八位数吗?

平均值在编程中很常见,常常被用来作为判断,标准是否超出平均值、是否未达到平均值等,特别是在工业编程上,平均值判断常常被用来控制产品的生产。听起来,编写平均值判断非常枯燥,难道没有好玩、有趣的吗?

本期题目:电视上的比赛,经常需要评委打分,一般显示的都是平均分,你能编程显示最公平和最不公平的打分吗?

题目中的公平是什么?不要想当然的认为打分最低的就是最不公平的、分数在中间的就是最公平的。一般来说,比赛中的平均分都是去掉最高分、最低分后得出的,所以和平均分差异最大的就是最不公平的,和平均分差异最小的就是最公平的。

明白了这点,就好办了。先求出平均分,然后再依次求出每个评委得分和平均分之间差值的绝对值,这些差值中最大的就是最不公平的评委,而差值最小的就是最公平的评委。是不是很简单?

循环计算

通过循环,分别求出最大值、最小值和所有评分的总和,然后用总和减去最大值和最小值,再通过除法得出平均分,最后通过一一比较得到答案,关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

int[] score = {100,64,58,92,91,85,80,70,

60,64}; //假设评委有10个,一共有10个打分

int maxIndex = 0; //最大值数组下标

int minIndex = 0; //最小值数组下标

int sum = 0; //存储和

int len = score.length; //评委个数

//求最大值

for(int i = 0;i < len;i++){

if(score[maxIndex] < score[i]){

maxIndex = i;

}

}

//求最小值

for(int i = 0;i < len;i++){

if(score[minIndex] > score[i]){

minIndex = i;

//最公平评委

int bestJuryIndex = 0;

for(int i = 0;i < len;i++){

if(absValue[bestJuryIndex] > absValue[i]){

bestJuryIndex = i;

}

}

//最不公平评委

int worstJuryIndex = 0;

for(int i = 0;i < len;i++){

if(absValue[worstJuryIndex] < absValue[i]){

worstJuryIndex = i;

进阶方法

上面的方法,估计大家都想得到,但这种方法明显效率不高,通过合并部分循环就可以实现提高代码执行速度的目的,关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):

//最公平评委、最不公平评委

int bestJuryIndex = 0;

int worstJuryIndex = 0;

for(int i = 0;i < len;i++){

if(absValue[bestJuryIndex] > absValue[i]){

bestJuryIndex = i;

}

if(absValue[worstJuryIndex] < absValue[i]){

worstJuryIndex = i;

实际应用

本文介绍的平均值判断,虽然简单,但应用范围却很广,例如数据库管理软件(常见的有Oracle、SQL Server、MySQL等)中就嵌入了平均值判断的功能,帮助用户高效、便捷地管理数据库。

此外,在普通人的生活中也时常可以看到平均值判断的身影,大家所熟知的股票软件中的均线,就用到了平均值判断,例如30日均线就是大盘30天的收盘价再除以30形成30日均点,然后依次连接均点就形成30日均线 。

露一手

上期的题目,很多编程爱好者踊跃参与,其中来自江西南昌的周凯童鞋,非常耀眼,他是唯一一个提供了3种心形图形编程方法的人,第二种方法比较有意思,用ASCII码直接输出“■”(见图),他的思维非常活跃,值得大家借鉴。我们将给予周凯童鞋现金奖励。

28-g13-1.jpg