前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >逻辑推理 - 农夫养牛问题

逻辑推理 - 农夫养牛问题

作者头像
Jimmy_is_jimmy
发布2022-03-10 13:59:14
3080
发布2022-03-10 13:59:14
举报
文章被收录于专栏:call_me_Rcall_me_R

上周五晚上,在某群上看到下面这么道面试题目:

题目:

一个农夫,买了一头小牛,这头牛,成长到第四年开始,会每年生一头小牛,所生出来的小牛成长到第四年开始,也会每年生出一头小牛,请问 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来实现下~

代码语言: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)

上面程序运行结果如下:

代码语言:javascript
复制
"第1年,有1个牛"
"第2年,有1个牛"
"第3年,有1个牛"
"第4年,有2个牛"
"第5年,有3个牛"
"第6年,有4个牛"
"第7年,有6个牛"
"第8年,有9个牛"
"第9年,有13个牛"
"第10年,有19个牛"

上面有啥不严谨的地方,希望您指出。相关的代码演示地址how_many_cow from codepen。

后话

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • 实现
  • 后话
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档