• 免费注册  马上登录
  • 切换到窄版
  • go语言|go语言部落|go文库

    查看: 44|回复: 0

    go语言函数的练习:分金币

    [复制链接]

    23

    主题

    23

    帖子

    118

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    118
    发表于 2019-11-25 17:19:09 | 显示全部楼层 |阅读模式

    package main

    import "fmt"
    /*
    你有100枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,Adriano,Aaron,Elizabeth。
    分配规则如下:
    a. 名字中每包含1个'e'或'E'分1枚金币
    b. 名字中每包含1个'i'或'I'分2枚金币
    c. 名字中每包含1个'o'或'O'分3枚金币
    d: 名字中每包含1个'u'或'U'分4枚金币
    写一个程序,计算每个用户分到多少金币,以及最后剩余多少金币?
    程序结构如下,请实现 ‘dispatchCoin’ 函数
    */

    //定义金币个数,人的姓名,储存map
       var (
          names = []string{"Matthew", "Sarah", "Augustus", "Heidi", "Emilie", "Peter", "Giana", "Adriano", "Aaron", "Elizabeth"}
          coins = 100
          //定义一块map来储存结果,谁(string)分了多少枚金币(int)
          distribution = make(map[string]int,len(names))
       )
    func dispatchCoin() (LetOver int){
          //1.依次遍历,拿到每个人的名字
          for _,name :=range names{
          //2.拿到一个人的名字根据分金币的规则去分金币
             for _,s :=range name{
                //2.1 每个人分得的金币应该保存到distribution中
                //3. 还要记录剩余的金币数量
                switch s{
                case 'e','E':
                   distribution[name] +=1//满足这个条件分一枚金币
                   coins -=1//那么总金币就得减一
                case 'i','I':
                   distribution[name] +=2//满足这个条件分两枚金币
                   coins -=2
                case 'o','O':
                   distribution[name] +=3//满足这个条件分三枚金币
                   coins -=3
                case 'u','U':
                   distribution[name] +=4//满足这个条件分四枚金币
                   coins -=4
                }
             }
          }
       //3.整个第二步执行完就能得到剩余的金币数
       LetOver=coins
       return
    }
    func main(){
       LeftOver :=dispatchCoin()
       //4.遍历map就可以得到谁(string)分了多少枚金币(int)
       for n,value :=range distribution {
          fmt.Printf("%s拿到了%d枚金币\n",n,value)
       }
       fmt.Printf("最后剩下%d枚金币\n",LeftOver)
    }



    打印结果:

    Matthew拿到了1枚金币
    Heidi拿到了5枚金币
    Peter拿到了2枚金币
    Elizabeth拿到了4枚金币
    Augustus拿到了12枚金币
    Emilie拿到了6枚金币
    Giana拿到了2枚金币
    Adriano拿到了5枚金币
    Aaron拿到了3枚金币
    最后剩下60枚金币


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Go语言社区

    GMT+8, 2020-4-2 00:38 , Processed in 0.046075 second(s), 25 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表