招银网科笔试编程题

背景

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

题目:

题目摘抄自 这里

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

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值