美文网首页IT知识工具
【面试】逻辑推理 - 农夫养牛问题

【面试】逻辑推理 - 农夫养牛问题

作者: Ming_Hu | 来源:发表于2021-04-12 14:26 被阅读0次

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

    题目:

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

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

    后话

    相关文章

      网友评论

        本文标题:【面试】逻辑推理 - 农夫养牛问题

        本文链接:https://www.haomeiwen.com/subject/lulxlltx.html