go解决分金币问题

 

一、题目

你有100枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,Adriano,Aaron,Elizabeth。
分配规则如下:
  1.    名字中包含a或A,分配1枚金币
  2. 名字中包含e或E,分配1枚金币
  3. 名字中包含i或I,分配2枚金币
  4. 名字中包含o或O,分配3枚金币
  5. 名字中包含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切片实现。

 


posted @ 2021-03-30 19:57  〆海浔、深蓝(小武)  阅读(114)  评论(0编辑  收藏  举报