Adminxe's Blog | 低调求发展 - 潜心习安全 ,技术永无止境 | 谢谢您对本站的支持,有什么问题或者建议请及时联系:点击这里给我发消息

Go语言学习–分金币项目

安全开发 MoCo, MoCo 111℃ 0评论

项目要求

package main

import "fmt"

/*
你有50枚金币,需要分配给以下几个人: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’ 函数
*/
var (
    coins = 50
    users = []string{
        "Matthew", "Sarah", "Augustus", "Heidi", "Emilie", "Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
    }
    distribution = make(map[string]int, len(users))
)

func main() {
    left := dispatchCoin()
    fmt.Println("剩下:", left)
}

项目编写思路

//1.依次拿到每个人的名字,因为是依次取出
    //2.拿到一个人名根据分金币的规则去分金币
    //2.1 每个人分的金币数应该保存到distribution中
    //2.2还要记录下剩余金币数
    //3.整个第二部执行完成就能得到最终每个人分的金币数和剩余的金币数

项目编写

package main

import "fmt"

/*
你有50枚金币,需要分配给以下几个人: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’ 函数
*/
//思路:
//1.依次拿到每个人的名字,因为是依次取出
//2.拿到一个人名根据分金币的规则去分金币
//2.1 每个人分的金币数应该保存到distribution中
//2.2还要记录下剩余金币数
//3.整个第二部执行完成就能得到最终每个人分的金币数和剩余的金币数
var (
    coins = 50
    users = []string{
        "Matthew", "Sarah", "Augustus", "Heidi", "Emilie", "Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
    }
    distribution = make(map[string]int, len(users))
    //初始化值为切片类型的map,
    //map[string]int : map;
    //make(map[string]int, len(users)):map的初始化;len(users):map的容量
)

func dispatchCoin() (left int) { //无需手动去传参,光需要返回值,故使用没有参数但有返回值类型的函数
    //1.依次拿到每个人的名字,因为是依次取出,所以想到了for  range  来遍历出每个值
    for _, name := range users { //   在users中取出值赋值给name
        //2.拿到一个人名根据分金币的规则去分金币,因为分配规则是按照字符进行来分配的,故需要将取出来的字符串的值,遍历成字符
        for _, c := range name { //在name中取出值赋值给c
            switch c { //因为有多个判断条件,故选择使用switch
            case 'e', 'E':
                //a. 名字中每包含1个'e'或'E'分1枚金币
                distribution[name]++ //每个人分的金币数应该保存到distribution中
                coins--              //剩余金币的数量
            case 'i', 'I':
                //b.名字中每包含1个'i'或'I'分2枚金币
                distribution[name] += 2
                coins -= 2
            case 'o', 'O':
                //c. 名字中每包含1个'o'或'O'分3枚金币
                distribution[name] += 3
                coins -= 3
            case 'u', 'U':
                //d: 名字中每包含1个'u'或'U'分4枚金币
                distribution[name] += 4
                coins -= 4
            } //switch判断完成(一个字母的金币分配完成)
        } //循环的完成代表一人已经分配完成
    } //循环的完成代表全部人已经分配完成

    left = coins
    return
}

func main() {
    left := dispatchCoin()
    fmt.Println("剩下:", left)
    for k, v := range distribution {
        fmt.Printf("%s:%d\n", k, v) //遍历出distribution这个map容器中存的数据,k为键值也就是咱的name,v就是键值。
    }
}

项目运行

转载请注明:Adminxe's Blog » Go语言学习–分金币项目

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址