C语言经典算法100例-021-猴子吃桃问题

有前面几道题的基础,这道题还是比较简单的,我们来看问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.分析,我们先来看看这个问题的数学模型:

设n为第一天摘的桃子数。那么根据已知条件有:

s1=n/2-1;

s2=s1/2-1;

...

s10=s9/2-1=1;

那么很显然有:

s9=(s10+1)*2;

s8=(s9+1)*2;

...

s1=(s2+1)*2;

s0=(s1+1)*2=n;

那么利用10趟循环就可以解决问题。

2.我们来看源代码:

#include <stdio.h>
#include <stdlib.h>
//猴子吃桃问题
int main()
{
    int n=1;
    int day=10;
    while(day>0)
    {
        n=2*(n+1);  //昨天的桃子数等与今天桃子数加1的二倍
        day--;
    }
    printf("Totally %d peaches!\n",n);
}

这里为了方便理解是从10到1循环,其实怎么循环都行,只要保证循环次数是10即可。

 

转载于:https://www.cnblogs.com/mrbourne/p/9959503.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值