| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1226 人关注过本帖
标题:猴子吃桃问题
只看楼主 加入收藏
楚雄过客
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2008-11-5
结帖率:0
收藏
 问题点数:0 回复次数:9 
猴子吃桃问题
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

    程序分析:采取逆向思维的方法,从后往前推断。

程序源代码:
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);
}

我是初学者,所以对"x1=(x2+1)*2; /*第一天的桃子数是第2天桃子数加1后的2倍*/"总是想不通,请高人帮我详解一下好吗,谢谢
搜索更多相关主题的帖子: 猴子 
2008-11-19 14:17
dingyin44
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2005-6-14
收藏
得分:0 
程序是倒推的
2008-11-19 15:06
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
第十天     1
第9天     (1+1)*2    4
第8天     (4+1)*2    10
第7天     (10+1)*2   22
第6天     (22+1)*2   46
第5天     (46+1)*2   94
第4天     (94+1)*2   190
第3天     (190+1)*2  382
第2天     (382+1)*2  766
第1天     (766+1)*2  1534
这样看应该明白了吧
2008-11-19 20:55
cyz7929
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2008-10-26
收藏
得分:0 
递归,以后函数里面要学
2008-11-19 21:19
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
我没有看源文件啊..
我自己写写看..
程序代码:
int monkey(int i){
  if(i==1)
    return 1;
  else
    return 2*(monkey(i-1)+1);
}
int main(void){
  printf("猴子一共栽了%d个桃子",monkey(10));
  getch();
  return 1;
}


使用的是递归方法
然后为了巩固以前的static的用法,再发一种代码
程序代码:
int peach(void){
  static int i=1;
  if(i==10)
    return 1;
  else{
    i++;
    return 2*(peach()+1);
  }
}
int main(void){
  printf("猴子一共栽了%d个桃子",peach());
  getch();
  return 1;
}


其中使用到了static的特点.

[[it] 本帖最后由 zqy110007 于 2008-11-19 22:12 编辑 [/it]]

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-19 22:01
peitao2003
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2008-10-17
收藏
得分:0 
运用数学思维,吧数列列出来,然后倒退就出来了。试试吧
2008-11-19 22:14
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
关于楼主的这一句话:
x1=(x2+1)*2; /*第一天的桃子数是第2天桃子数加1后的2倍*/"总是想不通,请高人帮我详解一下好吗,谢谢
我就打个比方,比如说现在有50个桃子,首先吃一半的,还剩25个,再吃一个,还剩24个..
我就让你24怎么变回50?24*2+1?不是..等于49,应该是:(24+1)*2,而24就用变量x2来代替..

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-19 22:36
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
[bo][un]zqy110007[/un] 在 2008-11-19 22:01 的发言:[/bo]

我没有看源文件啊..
我自己写写看..int monkey(int i){
  if(i==1)
    return 1;
  else
    return 2*(monkey(i-1)+1);
}
int main(void){
  printf("猴子一共栽了%d个桃子",monkey(10));
  getch();
   ...

高手!!!用静态变量做
2008-11-20 00:59
楚雄过客
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2008-11-5
收藏
得分:0 
终于想通了,谢谢楼上的各路朋友
2008-11-20 08:57
wangtao2536
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-9-19
收藏
得分:0 
main()
{
   int day=10,x=1;
   while (day>1)
    { printf("the %d day is:%d\n",day,x);
      x=x*2+2;
      day--;

    }

   printf("\nthe total is:%d",x);
    getch();
}
2008-11-27 22:35
快速回复:猴子吃桃问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020047 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved