一、问题要求:
跳水比赛,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()
}
三、总结
寻找分数最大值和最小值的这个功能可以单独打包为一个函数,这样在找分差最大值和最小值的时候可以重复使用。
浙公网安备 33010602011771号