Golang 分金币题目解析

Golang 分金币题目解析

1、分金币

1.1、要求

​ 你有五十枚金币,需要分给以下几个人:

1.Matthew 2.Sarah 3.Augustus 4.Heidi 5.Emilie 6.Peter 7.Giana 8.Adriano 9.Aaron 10.Elizabeth
分配规则如下:
a.名字中每包含一个’e’或’E’分1枚金币
b.名字中每包含一个’i’或’I’分2枚金币
c.名字中每包含一个’o’或’O’分2枚金币
d.名字中每包含一个’u’或’U’分2枚金币

1.2、 结果

​ 用golang编写程序,计算每个用户分到多少枚金币,以及最后剩余多少金币?

1.3分析、

首先我们对这个题目进行一个步骤解析:

确定需要的变量:

coins:金币数量

users:需要分金币的用户名

distribution:每个用户以及分得的金币数量以Key:Value格式存放在Map中

1.依次拿到每个人的名字,遍历users
2.获取到一个名字根据规则分配金币
2.1.没人分得金币数应该保存到distribution中
2.2.计算剩余金币数量

2、实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main

import "fmt"

var (
coins = 50
users = []string{
"Matthew", "Sarah", "Augustus", "Heidi", "Emilie",
"Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
}
distribution = make(map[string]int, len(users))
)

func dispatchCoin() (left int) {
/* 思路:
1.依次拿到每个人的名字,遍历users
2.获取到一个名字根据规则分配金币
2.1.没人分得金币数应该保存到distribution中
2.2.计算剩余金币数量 */
for _, name := range users {
for _, c := range name {
switch c {
case 'e', 'E':
// 满足该条件给给用户分配金币
distribution[name]++
coins--
case 'i', 'I':
distribution[name] += 2
coins -= 2
case 'o', 'O':
distribution[name] += 3
coins -= 3
case 'u', 'U':
distribution[name] += 4
coins -= 4
}
}
}
left = coins
return
}

func main() {
left := dispatchCoin()
// 第二种计算剩余金币方法 计算出map中所有value的和 然后 用金币总数减去
count := 0
for n := range distribution {
count += distribution[n]
}
fmt.Println(count)
fmt.Println("剩下:", left, (50 - count))
for k, v := range distribution {
fmt.Printf("%s:%d\n", k, v)
}
}

3、输出

每人获得金币及剩余金币

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×