招銀網科筆試編程題

背景

網上看到一道招銀網絡科技的筆試編程題,修改了原博客的錯誤並添加了講解:

題目:

題目摘抄自 這裏

假設每隻母牛從出生後,次年後的每年年初會生下兩隻母牛,並且隨着年份的增加每年成倍數死亡,即第1年死2只母牛。第2年死22只,第3年死3*2只依次類推(題目沒懂得看下面的就可以了)
問題:假設第一年年初時,有10頭母牛,第二年年初後有28頭母牛,類推,問第100年的年初出生後,有多少隻母牛,請在java/c++之間選擇一種編程語言,用遞歸的方法求解並完成代碼的編寫。

代碼

#include<iostream>
//author: hmtian @2020/6/21
int CalCow(int cow, int year, int years) //year 代表第一年,years代表共多少年
{
  while( year+1 <= years) //注意是year + 1
    {
        cow = cow*3 - year*2;
        year++;
        CalCow(cow, year, years);
    }
    return cow;
}

int main()
{
  int cow = CalCow(10,1,3);  //這裏以第三年爲例
  std::cout <<" cows:" << cow << std::endl;
  return 0;
}

講解

第一年:10
第二年:10 + 10*2 - 1 == 28 == 10*3 -2
第三年:28 + 28*2 -2*2 == 80 == 28*3 -4
第四年:80 + 80*2 -2*3 == 234 == 80*3 -6
以此類推...
這就是爲什麼計算表達式爲:cow = cow*3 - year*2;

結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章