你有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枚金币
写一个程序,计算每个用户分到多少金币,以及最后剩余多少金币?
package main
import (
"fmt"
"strings"
)
var (
// 总金币
coins = 50
// 所有用户
users = []string{
"Matthew", "Sarah", "Augustus", "Heidi", "Emilie", "Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
}
// 用户金币计数定义
distribution = make(map[string]int, len(users))
// 奖励规则
rules = map[string]int{"e": 1, "i": 2, "o": 3, "u": 4}
)
func main() {
left := dispatchCoin(users, rules, coins)
fmt.Println("剩下:", left)
fmt.Println(distribution)
}
func dispatchCoin(users []string, rules map[string]int, coins int) int {
for _,value := range users {
for rk,rv := range rules {
// 转小写
tolower := strings.ToLower(value)
// 返回字符串 tolower 中有几个不重复的 rk 子串
// 获取奖励规则中字母出现的次数
c := strings.Count(tolower, rk)
if c == 0 || coins < (c*rv) {
continue
} else {
// 总金币数减少
coins -= c*rv
// 用户金币持有计数
distribution[value] += c*rv
}
}
}
return coins
}
复制代码