php 最佳评委和最差评委,GO数组练习 - Go语言中文网 - Golang中文社区

题目要求:

跳水比赛 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)

}

结果

9062ffbde6d1531ab4d25152c8b9db3c.png

有疑问加站长微信联系(非本文作者)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值