题目要求:
跳水比赛 8个评委打分,运动员的成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分,使现
(1)请把最高分,最低分的评委找出
(2)找出最佳评委和最差评委。最佳评委是最后得分差距最小,最差评委最后得分差距最大
分析:
设计一个函数求最高分 最低分 平均分 需要考虑存在多个最低分和最高分的情况
找最有裁判和最差裁判使用abs() 以及切片完成 将绝对值传入到切片中再遍历
源代码:package main
//跳水比赛 8个评委打分,运动员的成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分,使现
//请把最高分,最低分的评委找出
//找出最佳评委和最差评委。最佳评委是最后得分差距最小,最差评委最后得分差距最大
//分析:
//设计一个函数求最高分 最低分 平均分 需要考虑存在多个最低分和最高分的情况
//找最有裁判和最差裁判使用abs() 以及切片完成 将绝对值传入到切片中再遍历
import (
"fmt"
"math"
)
func max(array *[8]float64) (mx float64,mi float64,avg float64){
max := 0.0
for i := 0; i
if (*array)[i] > max {
max = (*array)[i]
}
}
min := max
for i := 0; i
if (*array)[i]
min = (*array)[i]
}
}
mx = max
mi = min
sum := 0.0
maxcount,mincount :=0.0,0.0
for i := 0; i
//判断最大值和最小值出现的次数 1次时直接去掉 多次是需要加上去
if (*array)[i] == max {
maxcount +=1
}
if (*array)[i] == min{
mincount +=1
}
//算出不包含任意一次不包含 最大值、最小值的和
if (*array)[i] != max && (*array)[i] != min{
sum += (*array)[i]
}
}
//fmt.Println(maxcount,mincount)
//处理出现多次最大值或者最小值
if mincount > 1.0 && maxcount > 1.0{
sum += (max*(maxcount-1)+min*(mincount-1))
}else if mincount > 1.0 && maxcount == 1.0{
sum += (min*(mincount-1))
}else if mincount ==1.0 && maxcount > 1.0{
sum += (max*(maxcount-1))
}else {
sum += 0
}
avg = sum/6.0
return mx,min,avg
}
func Best(array1 *[8]float64, arry2 []float64, avg float64) {
for i := 0; i
arry2 = append(arry2, math.Abs((*array1)[i]-avg))
}
max := 0.0
for j :=0;j
if arry2[j] > max{
max = arry2[j]
}
}
min := max
for i := 0; i
if arry2[i]
min = arry2[i]
}
}
for i := 0; i
if arry2[i] == min {
fmt.Printf("最优秀评分者为第%v位裁判,评分:%v 和平均分相差%v\n",i+1,(*array1)[i],min)
}
}
for i := 0; i
if arry2[i] == max {
fmt.Printf("评分差距最大者为第%v位裁判,评分:%v和平均分相差%v\n",i+1,(*array1)[i],max)
}
}
}
var Socre [8]float64
var Socreabs = make([]float64,0,0)
func main() {
//输入8个裁判的分数
for i := 0;i
fmt.Printf("请输入第%v位裁判的的评分:\n",i+1)
fmt.Scanln(&Socre[i])
}
max,min,avg :=max(&Socre)
fmt.Println(Socre)
fmt.Printf("最高分为:%v,最低分为:%v 平均分为:%v\n",max,min,avg)
//知道最大分 最小分 找最大分、最小分的裁判
for k :=0;k
if Socre[k] == max{
fmt.Printf("最高分为:%v,第%v位裁判\n",max,k+1)
}else if Socre[k] == min {
fmt.Printf("最低分:%v,第%v位裁判\n",min,k+1)
}
}
Best(&Socre,Socreabs,avg)
}
结果
有疑问加站长微信联系(非本文作者)