golang学习—函数练习题1

题目

有50金币,需要分配给一下几个人,Matthew,Sara,August,Heidi,Emilie,Peter,Glana,Adriano,Elizabeth。

分配规则如下:

  1. 名字中包含1个“e”或“E”的分1枚金币
  2. 名字中包含1个“i”或“I”的分2枚金币
  3. 名字中包含1个“o”或“O”的分3枚金币
  4. 名字中包含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)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值