笔试面试题, 奶牛产子

一只刚出生的奶牛,3年到7年每年会产生1只奶牛,活到第10年会自然死亡。现在给你一只刚出生的奶牛,求N年后有多少奶牛。

用golang实现了一个版本, 花了大概30分钟, 代码比较糙, 先记录着!

package main

import (
"fmt"
"strconv"
)

func main() {
var defineYear = 4 //假设共xx年
var cowMap = make(map[string]int)
var mapIndexString = "0"
cowMap[mapIndexString] = 1
var year = 1
for {
year++
if year > defineYear {
break
}

cowLen := len(cowMap)
for i := 0; i < cowLen; i++ {
var cowAge = cowMap[strconv.Itoa(i)]
//fmt.Println(cowAge)
//每年奶牛增加1岁
cowMap[strconv.Itoa(i)] = cowAge + 1
//奶牛达到3岁和7岁间,每年增加一头奶牛
var nCowAge = cowMap[strconv.Itoa(i)]

//奶牛达到10岁则自然死亡
if nCowAge >= 10 {
delete(cowMap, strconv.Itoa(i))
}

if nCowAge >= 3 && nCowAge <= 7 {
//map中增加一头奶牛 奶牛标记
var nextMapIndex, _ = strconv.Atoi(mapIndexString)
var nextIndexStr = strconv.Itoa(nextMapIndex + 1)
cowMap[nextIndexStr] = 1
mapIndexString = nextIndexStr
}
}
}
fmt.Println(cowMap)
}

代码输出: map[0:4 1:2 2:1]

最后循环一次cowMap中的value相加,即能得到奶牛总年龄, len(cowMap)就是剩余的奶牛总数.

如果读者发现有问题,欢迎留言!