50金币的问题
/*
你有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枚金币
写一个程序,计算每个用户分到多少金币,以及最后剩余多少金币?
程序结构如下,请实现 ‘dispatchCoin’ 函数
*/
var (
coins = 50
users = []string{
"Matthew", "Sarah", "Augustus", "Heidi", "Emilie", "Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
}
distribution = make(map[string]int, len(users))
)
func main() {
left := dispatchCoin()
fmt.Println("剩下:", left)
}
func dispatchCoin(arr []string) int {
for _, v := range arr {
fmt.Println(v)
for i := 0; i < len(v); i++ {
if v[i] == 'e' || v[i] == 'E' {
distribution[v] += 1
} else if v[i] == 'i' || v[i] == 'I' {
distribution[v] += 2
} else if v[i] == 'o' || v[i] == 'O' {
distribution[v] += 3
} else if v[i] == 'u' || v[i] == 'U' {
distribution[v] += 4
}
}
coins -= distribution[v]
fmt.Printf("分得:%d\n", distribution[v])
}
return coins
}
递归相关的面试题
- 计算斐波那契数列的第n项。
斐波那契数列是一个递归定义的数列,其中每个数字是前两个数字的和。例如,前几个数字是0、1、1、2、3、5、8、13、21等等。求第n项的值可以使用递归来解决。以下是一个示例代码:
goCopy code
func fibonacci(n int) int {
if n == 0 {
return 0
} else if n == 1 {
return 1
} else {
return fibonacci(n-1) + fibonacci(n-2)
}
}
- 遍历二叉树
递归可以用于遍历二叉树,其中包括前序遍历、中序遍历和后序遍历。以下是一个示例代码:
goCopy code
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func preorderTraversal(root *TreeNode) []int {
if root == nil {
return []int{}
}
res := []int{root.Val}
res = append(res, preorderTraversal(root.Left)...)
res = append(res, preorderTraversal(root.Right)...)
return res
}
- 反转字符串
反转字符串可以使用递归来解决。基本思路是将第一个字符和最后一个字符交换,然后对除去这两个字符的子串进行递归。以下是一个示例代码:
goCopy code
func reverseString(s []byte) {
reverseHelper(s, 0, len(s)-1)
}
func reverseHelper(s []byte, start, end int) {
if start >= end {
return
}
s[start], s[end] = s[end], s[start]
reverseHelper(s, start+1, end-1)
}
这些都是递归常见的面试题,但在实际面试中,可能会有更具体的问题。因此,建议您熟练掌握递归的基本思想,并尝试解决更多不同类型的递归问题。