go解决分金币问题
一、题目
你有100枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,Adriano,Aaron,Elizabeth。
分配规则如下:
- 名字中包含a或A,分配1枚金币
-
名字中包含e或E,分配1枚金币
-
名字中包含i或I,分配2枚金币
-
名字中包含o或O,分配3枚金币
-
名字中包含u或U,分配5枚金币
写一个程序,计算每个用户分到多少金币,以及最后剩余多少金币?
二、代码展示:
package main
import "fmt"
var (
//金币总数
coins = 100
//名字
users = []string{
"Matthew", "Sarah", "Augustus", "Heidi", "Emilie",
"Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
}
// 存放分配结果的map
distribution = make(map[string]int, len(users))
)
/*
l 有100枚金币,需要分配给以下用户,分配规则如下:
n 名字中包含a或A,分配1枚金币
n 名字中包含e或E,分配1枚金币
n 名字中包含i或I,分配2枚金币
n 名字中包含o或O,分配3枚金币
n 名字中包含u或U,分配5枚金币
l 输出如下:
*/
func GetEveryConis(username string) int {
var num=0
for _,char:= range username {
switch char {
case 'a','A':
num+=1
case 'e','E':
num+=1
case 'i','I':
num+=2
case 'o','O':
num+=3
case 'u','U':
num+=5
default:
}
}
return num
}
//获取所有已分配的金币总数
func GetSumCoins() int {
var sum=0
for _,username:= range users {
var myCoins=GetEveryConis(username)
sum+=myCoins
value,ok := distribution[username]
if !ok {
distribution[username]=myCoins
}else {
distribution[username]=myCoins+value
}
}
return sum
}
func main() {
sum:=GetSumCoins()
for k,v:= range distribution{
fmt.Printf("姓名:%s分到%d枚金币\n",k,v)
}
fmt.Println("当前还剩余金币数:",coins-sum)
}
最后输出结果如下:
姓名:Giana分到4枚金币
姓名:Aaron分到5枚金币
姓名:Heidi分到5枚金币
姓名:Emilie分到6枚金币
姓名:Augustus分到16枚金币
姓名:Peter分到2枚金币
姓名:Adriano分到7枚金币
姓名:Elizabeth分到5枚金币
姓名:Matthew分到2枚金币
姓名:Sarah分到2枚金币
当前还剩余金币数: 46
说明:由于golang中map是无序的,所以每次go run 出来的结果可能不一样。如果想要排序输出请使用slice切片实现。