题目
有50金币,需要分配给一下几个人,Matthew,Sara,August,Heidi,Emilie,Peter,Glana,Adriano,Elizabeth。
分配规则如下:
- 名字中包含1个“e”或“E”的分1枚金币
- 名字中包含1个“i”或“I”的分2枚金币
- 名字中包含1个“o”或“O”的分3枚金币
- 名字中包含1个“u”或“U”的分4枚金币
写一个程序,计算每个用户分到多少金币,以及最后剩余多少金币?
程序结构如下,请实现 ‘dispatchCoin’ 函数
var ( coins = 50 users = []string{ "Matthew", "Sara", "August", "Heidi", "Emilie", "Peter", "Glana", "Adriano", "Elizabeth"} length = len(users) distribution = make(map[string]int, length) ) func dispatchCoin() (left int) { return }
结果
误打误撞写了出来。。。
方法1:
var (
coins = 50
users = []string{
"Matthew", "Sara", "August", "Heidi", "Emilie", "Peter", "Glana", "Adriano", "Elizabeth"}
length = len(users)
distribution = make(map[string]int, length)
)
func dispatchCoin() (left int) {
var c int // 设置一个变量存储每次分配的金币数
for _, v := range users { // 1. 获取人名
c = 0
for _, vv := range v { // 2. 按规则分配,遍历人名中的每个字符
vm := string(vv)
if vm == "e" || vm == "E" {
c += 1
}
if vm == "i" || vm == "I" {
c += 2
}
if vm == "o" || vm == "O" {
c += 3
}
if vm == "u" || vm == "U" {
c += 4
}
}
distribution[v] = c // 每个人分的金币数保存到 distribution 中
coins -= c // 记录每次分配后剩下金币数
}
left = coins // 记录最终剩余金币数
return
}
func main() {
left := dispatchCoin()
fmt.Println(distribution)
fmt.Println("剩下:", left)
}
方法2:
var (
coins = 50
users = []string{
"Matthew", "Sara", "August", "Heidi", "Emilie", "Peter", "Glana", "Adriano", "Elizabeth"}
length = len(users)
distribution = make(map[string]int, length)
)
func dispatchCoin() (left int) {
var c int // 设置一个变量存储每次分配的金币数
for _, v := range users { // 1. 获取人名
c = 0
for _, vv := range v { // 2. 按规则分配,遍历人名中的每个字符
vm := string(vv)
switch vm {
case "e", "E":
c += 1
case "i", "I":
c += 2
case "o", "O":
c += 3
case "u", "U":
c += 4
}
}
distribution[v] = c // 每个人分的金币数保存到 distribution 中
coins -= c // 记录每次分配后剩下金币数
}
left = coins // 记录最终剩余金币数
return
}
func main() {
left := dispatchCoin()
fmt.Println(distribution)
fmt.Println("剩下:", left)
}