題目要求:bash
跳水比賽 8個評委打分,運動員的成績去掉一個最高分,去掉一個最低分,剩下的6個分數的平均分就是最後得分,使現app
(1)請把最高分,最低分的評委找出ide
(2)找出最佳評委和最差評委。最佳評委是最後得分差距最小,最差評委最後得分差距最大函數
分析:設計
設計一個函數求最高分 最低分 平均分 須要考慮存在多個最低分和最高分的狀況blog
找最有裁判和最差裁判使用abs() 以及切片完成 將絕對值傳入到切片中再遍歷it
源代碼:class
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 < len(array); i++ { if (*array)[i] > max { max = (*array)[i] } } min := max for i := 0; i < len(array); i++ { if (*array)[i] < min { min = (*array)[i] } } mx = max mi = min sum := 0.0 maxcount,mincount :=0.0,0.0 for i := 0; i < len(array); 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 < len(array1); i++ { arry2 = append(arry2, math.Abs((*array1)[i]-avg)) } max := 0.0 for j :=0;j < len(arry2);j++{ if arry2[j] > max{ max = arry2[j] } } min := max for i := 0; i < len(arry2); i++ { if arry2[i] < min { min = arry2[i] } } for i := 0; i < len(arry2); i++ { if arry2[i] == min { fmt.Printf("最優秀評分者爲第%v位裁判,評分:%v 和平均分相差%v\n",i+1,(*array1)[i],min) } } for i := 0; i < len(arry2); 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<len(Socre);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<len(Socre);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) }
結果import