上周五晚上,在某群上看到下面这么道面试题目:
题目:
一个农夫,买了一头小牛,这头牛,成长到第四年开始,会每年生一头小牛,所生出来的小牛成长到第四年开始,也会每年生出一头小牛,请问 N 年之后,农夫共有多少头牛?
不考虑其他情况,比如死亡,逃跑等情况
思路
可以生育的牛称为大牛,未可生育的牛称为小牛
第 1 年:1头小牛
第 2 年:1头小牛
第 3 年:1头小牛
第 4 年:1头小牛,1头大牛 - 2头牛
第 5 年:2头小牛,1头大牛 - 3头牛
第 6 年:3头小牛,1头大牛 - 4头牛
第 7 年:4头小牛,2头大牛 - 6头牛
第 8 年:6头小牛,3头大牛 - 9头牛
...
实现
作为一个切图仔,我们使用javascript
来实现下~
// 一个农夫,买了一头小牛,这头牛,成长到第四年开始,会每年生一头小牛,所生出来的小牛成长到第四年开始,也会每年生出一头小牛,请问 N 年之后,农夫共有多少头牛? // 不考虑其他情况 class Cow { constructor() { this.age = 1 } addAge() { this.age++ } isCanBirth() { return this.age >= 4; } } function init(year) { let arr = [new Cow()]; for(let i = 1; i <= year; i++) { for(let j = 0; j < arr.length; j ++) { let cow = arr[j]; if(cow.isCanBirth()) { arr.push(new Cow()) } else { cow.addAge() } } console.log(`第${i}年,有${arr.length}个牛`) } } init(10) 复制代码
上面程序运行结果如下:
"第1年,有1个牛" "第2年,有1个牛" "第3年,有1个牛" "第4年,有2个牛" "第5年,有3个牛" "第6年,有4个牛" "第7年,有6个牛" "第8年,有9个牛" "第9年,有13个牛" "第10年,有19个牛" 复制代码
上面有啥不严谨的地方,希望您指出。