招银网科笔试编程题

背景

网上看到一道招银网络科技的笔试编程题,修改了原博客的错误并添加了讲解:

题目:

题目摘抄自 这里

假设每只母牛从出生后,次年后的每年年初会生下两只母牛,并且随着年份的增加每年成倍数死亡,即第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;

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44378800/article/details/106891944
今日推荐