Null-Zero-One-Null

导航

 

  一、问题要求:

跳水比赛,8个评委打分。运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分,使用一维数组实现如下功能:
(1)请把打最高分的评委和最低分的评委找出来
(2)找出最佳评委和最差评委,最佳评委就是打分和最后得分最接近的评委。最差评委就是打分和最后得分相差最大的。

  二、代码实现:
package main

import "fmt"

//跳水比赛,8个评委打分。运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分,使用一维数组实现如下功能:
//(1)请把打最高分的评委和最低分的评委找出来
//(2)找出最佳评委和最差评委,最佳评委就是打分和最后得分最接近的评委。最差评委就是打分和最后得分相差最大的。

func scanScore() {
	//初始化初始分数数组,输入分数
	fmt.Println("请输入各个评委的评分。")
	var initScore [8]float64
	for j := 0; j < 8; j++ {
		fmt.Scanln(&initScore[j])
	}
	fmt.Println("您输入的评分为:", initScore)

	//查找最高分和最低分的成绩和下标,
	var highestScoreIndex, lowestScoreIndex int
	//初始化最高分和最低分,求出最高分和最低分的下标
	var highestScore, lowestScore float64 = initScore[0], initScore[0]
	for j := 1; j < 8; j++ {
		if initScore[j] > highestScore {
			highestScore = initScore[j]
			highestScoreIndex = j
		} else if initScore[j] < lowestScore {
			lowestScore = initScore[j]
			lowestScoreIndex = j
		}
	}
	//查找评最高分和最低分的评委对应的下标
	var highestScoreReferee, lowestScoreReferee []int
	for j := 0; j < 8; j++ {
		if highestScore == initScore[j] {
			highestScoreReferee = append(highestScoreReferee, j)
		} else if lowestScore == initScore[j] {
			lowestScoreReferee = append(lowestScoreReferee, j)
		}
	}

	//输出评最高分和最低分的评委和评分
	fmt.Printf("打最高分的评委是%v、分数%v,打最低分的评委是%v,分数%v。\n", highestScoreReferee, highestScore, lowestScoreReferee, lowestScore)
	//将最高分和最低分各省略一个,然后求总和和平均分
	var sumScore, avgScore float64
	for j := 0; j < 8; j++ {
		if j != highestScoreIndex || j != lowestScoreIndex {
			sumScore += initScore[j]
		}
	}
	avgScore = sumScore / 6

	//将每个裁判与平均分的分差求出来,对应一一存入数组
	var differScore [8]float64
	for j := 0; j < 8; j++ {
		if initScore[j] > avgScore {
			differScore[j] = initScore[j] - avgScore
		} else {
			differScore[j] = avgScore - initScore[j]
		}
	}

	//求与平均分相差最多分和最少分
	var highestDifferScore, lowestDifferScore float64 = differScore[0], differScore[0]
	for j := 1; j < 8; j++ {
		if differScore[j] > highestDifferScore {
			highestDifferScore = differScore[j]
		} else if differScore[j] < lowestDifferScore {
			lowestDifferScore = differScore[j]
		}
	}
	//求与平均分相差最高分和最低分的下标对应的裁判号
	var bestReferee, worstReferee []int
	for j := 0; j < 8; j++ {
		if highestDifferScore == differScore[j] {
			worstReferee = append(worstReferee, j)
		} else if lowestDifferScore == differScore[j] {
			bestReferee = append(bestReferee, j)
		}
	}
	fmt.Printf("平均分为%v,总分为%v,最佳裁判是:%v,最差裁判是:%v", avgScore, sumScore, bestReferee, worstReferee)

}

func main() {
	scanScore()
}

  三、总结

    寻找分数最大值和最小值的这个功能可以单独打包为一个函数,这样在找分差最大值和最小值的时候可以重复使用。


posted on 2022-02-15 21:01  Null-Zero-One-Null  阅读(787)  评论(0)    收藏  举报