猴子吃桃问题再思考

【练习题】 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少

首先看到这道题我最先想到的是循环:设后一天的桃子数为an

于是前一天的桃子数为an-1

所以可得一个递推式an = an-1/2+ 1

逆推就可得:an =(an-1+ 1) * 2

所以这道题就可以解了

#include<stdio.h>
int main(){
    int i = 0;
    int N = 0;
    scanf("%d",&N);
    int an = 1;
    for(i = 1; i < N; i++){
        an = 2 * an + 2;
    }
    printf("%d",an);
}

如果只是锻炼我们的编程能力的话写到这就可以了,但是我们是神一样的程序员我们还要继续深挖:

如果逆推的话可得:an =(an-1+ 1) * 2

记得我们高三常做的一种题型是构造新数列:

设x

an + x = 2*(an-1 + x)并且这个式子等价于an = an-1/2 + 1

于是可得x = 2

所以可得一个新的等比数列设为bn = an +2

所以bn= 3 * 2n – 1

所以又可得代码:

#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    int s = 3;
    for(int i = 1; i < n; i++)
    {
        s *= 2;
    }
    printf("%d",s - 2);
}




 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值