黑马程序员技术交流社区

标题: 猴子吃桃问题 [打印本页]

作者: hi虚无缥缈    时间: 2015-5-25 21:43
标题: 猴子吃桃问题
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个

第二天早上又将剩下的桃子吃掉一半,
又多吃了一个。
以后每天早上都吃了前一天剩

  



的一半零一个。到第
10
天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多
少。
  
1.
程序分析:采取逆向思维的方法,从后往前推断。

2.
程序源代码:

main()
{  
int day,x1,x2;
day=9;
x2=1;  
while(day>0)  

{x1=(x2+1)*2;/*
第一天的桃子数是第
2
天桃子数加
1
后的
2

*/

x2=x1;

day--;

}  
printf("the total is %d\n",x1);
第二天的桃子怎么推算
作者: XiaoBaoMi    时间: 2015-5-26 15:00
10: 1 ,9:4, 8:10 ,7:22 ---> a*2 + 2
作者: yuang4074    时间: 2015-5-26 15:54
本帖最后由 yuang4074 于 2015-5-26 15:55 编辑

#include<stdio.h>
int eat(int day)
{
  int x1=0,x2=1;//x2是第9天吃剩的桃子个数也就是第10天见到的桃子个数
  while(day>0)//反推到第一天
  {
        printf("第%d天吃过后剩:%d\t",day,x2);
        printf("第%d天还有:%d\t",day+1,x2);
        x1=(x2+1)*2;   //通过当天剩余的桃子求出前天的桃子
        x2=x1;//用得出的桃子作为前天的剩余的桃子
        printf("第%d天没吃时有:%d\n",day,x1);
        day--;
  }
  printf("\n由自底向上的吃桃记录↑知:这只猴子共摘了%d只桃子。\n\n",x1);
}
int main(int argc, char *argv[]){
        eat(9);//第10见到的桃子就是第9天吃剩的桃子
        return 0;
}
作者: 天是蓝色的    时间: 2015-5-26 21:06
用递归的思想




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2