50

GO数组练习

 6 years ago
source link: https://studygolang.com/articles/18810?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

题目要求:

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


}

结果

YJNfQzF.png!web


Recommend

  • 115
    • 掘金 juejin.im 7 years ago
    • Cache

    vue插件开发练习--实用弹窗

    1.前言上回说了组件(vue组件开发练习--焦点图切换)的一个练习项目,这次换下口味,说下vue的插件练手的项目。相对于现在之前的焦点图切换的组件,这个可能就更简单了,基本就是熟悉下插件开发的步骤就可以了!这个项目,我更建议大家动手练习了,这个弹窗比之前...

  • 93
    • blog.51cto.com 7 years ago
    • Cache

    Python练习(day7)-沐梓琼-51CTO博客

    Python练习(day7)

  • 72

    编写一个脚本,可以获得指定目录下的所有文件及文件夹的大小。输出的样式与 ls -lh 命令相同。

  • 95
    • blog.51cto.com 7 years ago
    • Cache

    Python练习(day9)-沐梓琼-51CTO博客

    练习1、模拟抢车票(进程同步锁)代码1:(并发运行,效率高,但竞争同一文件,数据写入错乱)frommultiprocessingimportProcessimporttime,json,randomdefsearch():dic=json.load(open('db.txt'))print('剩余票数%s'%dic['count'])defget():dic=json.load(open('db.

  • 175
    • blog.51cto.com 7 years ago
    • Cache

    Shell练习(九)-kindy个人博客

    习题1:找规律打印数字要求:请详细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字。            10 31 53 77  105 141 …….提示:相邻两个数差值的差值有规律参考答案:习题2:封IP要求:根据web服务器上的访问日志

  • 83

    一、准备数据库init.sql文件内容如下:/*&nbsp;数据导入:&nbsp;Navicat&nbsp;Premium&nbsp;Data&nbsp;Transfer&nbsp;Source&nbsp;Server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...

  • 128
    • blog.51cto.com 7 years ago
    • Cache

    Shell练习(十)-kindy个人博客

    习题1:用户交互脚本要求:写一个脚本,执行后,打印一行提示“Pleaseinputanumber:”,要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入”end”停止。参考答案:#!/bin/bash#date:2018年3月5日while:doread-p"Pleaseinputanumber:(endfo...

  • 26
    • studygolang.com 6 years ago
    • Cache

    Go数组反转练习

    package main //要求:随机生成5个数字,求和 并将其翻转打印 //思路 //1.随机生成五个数 rand.Intn()函数 //2、当我们得到随机数后 就放到一个数组 int数组 //3、反转打印 交换次数len/2 倒...

  • 4

    #yyds干货盘点# LeetCode 腾讯精选练习 50 题:数组中的第K个最大元素 精选 原创 灰太狼_cxh...

  • 8

    【C语言】进阶指针Ⅵ 指针和数组练习。 精选 原创 謓泽51Ctop 2022-12-19 11:31:45...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK