| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2569 人关注过本帖
标题:[求助]猴子吃桃
只看楼主 加入收藏
yangdejun
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2007-9-15
收藏
得分:0 
这是一道求N天的题,比你的先进了一点点,这时我以前做的,用递归算法
/*
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有多吃了一个,第二天早上又
将剩下的一半吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半另一个,到第N天
早上再吃时,就只剩一个桃子了。求第一天共摘多少桃子
*/
#include<stdio.h>
int day(int n)
{
int c;
if(n==1) c=1;
else c=(day(n-1)+1)*2;
return c;
}
int main()
{
int a;
while(1==scanf("%d",&a))
{
printf("%d\n\n",day(a));
}
return 0;
}
2007-10-27 15:55
PKER
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-10-18
收藏
得分:0 
以下是引用lqcheng在2007-10-27 8:40:33的发言:
[CODE]#include<stdio.h>
#define DAY 10
int main(void){
int n,m,i;
for(n=10;n<10000;n+=2){
m=n;
for(i=1;i<=DAY;i++){
m=m-(m/2+1);
}
if(m==1){
printf("%d\n",n);
n=10000;
}
}
return 0;
}[/CODE]
楼主亲自输入试试。我的结果是2048,当然不对了。m=m-(m/2+1); m/2,若m是奇数(循环几次后有可能),结果就不对了。

结果也许不对,题目说第一天吃掉一半,即不可能是奇数,再多吃一个,依次类推,m=m-(m/2+1)我觉得这个算式应该没什么问题吧?


抵制日货,人人有责!
2007-10-28 00:46
PKER
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-10-18
收藏
得分:0 
以下是引用lqcheng在2007-10-27 8:44:39的发言:
刚才没看见第二页,
原来多了个分号啊,
不过我觉得穷举不对

为什么穷举不对?
望赐教


抵制日货,人人有责!
2007-10-28 00:50
luo123
Rank: 1
等 级:新手上路
威 望:2
帖 子:324
专家分:0
注 册:2007-4-13
收藏
得分:0 
#include <stdio.h>
#define DAY 10
int main(void)
{
int i=1,n,m; //i为猴子第n天吃的桃子,m为猴子(n-1)天
for(n=DAY;n>1;n--);
{
m=i*2+1;
i=m;
if (n==2)
{
printf("%d",m);
}
}
getchar ();
return 0;
}



看看行不行

[此贴子已经被作者于2007-10-28 23:23:49编辑过]


[url=http://www..cn]电子编程[/url]
2007-10-28 01:57
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
递归,要不就老实去数学推导

自我放逐。。。
2007-10-28 02:16
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
以下是引用PKER在2007-10-26 14:20:58的发言:
猴子第一天摘了一些桃子,当天吃一半加1个,以后每天吃前天剩下的一半加1个,10天后只剩下1只,求第一天摘了多少?
我想用正推穷举把总数定为10000内,不知道这种思路对不对,结果是没有输出,也不知道哪里有问题
#include <stdio.h>
#define DAY 10
int main(void)
{
int i,n,m;
for(n=10;n<10000;n+=2); //错误就在多了这个分号,它使得你的循环体为一个空语句,所以真正的小循环体只执行了1次,结束时n=10000
//小循环结束时m!=1,所以不会打印。

{
m=n;
for(i=1;i<DAY;i++)
m=m-(m/2+1);
if (m==1)
{
printf("%d",n);
n=10000;
}
}
getchar ();
}

尽管你这种方法可行,也不推荐这么用,效率太低,而且不确定因素太多,比如你怎么知道10000一定够?或者10000是不是多的太多了?而且你这种穷举法还用的双层循环,如果是个很大的数据就会很慢了。

[此贴子已经被作者于2007-10-28 15:58:39编辑过]


“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-10-28 15:57
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
看看这个
http://yzfy.org/bbs/viewthread.php?tid=305




by 雨中飞燕 C/C++学习讨论群:46520219
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge)论坛:[/url] http://yzfy.org/
Blog: http://yzfy.programfan.com

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
2007-10-28 16:14
PKER
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-10-18
收藏
得分:0 
以下是引用moonwalker在2007-10-28 15:57:43的发言:

尽管你这种方法可行,也不推荐这么用,效率太低,而且不确定因素太多,比如你怎么知道10000一定够?或者10000是不是多的太多了?而且你这种穷举法还用的双层循环,如果是个很大的数据就会很慢了。


我只是想弄清一些事情。
既然方法可行,但是即使把分号去掉也没有得到正确结果,所以我很想知道具体是什么地方出了问题?这个问题困扰我好几天了,可是没人指出来。
很荣幸飞燕大侠也路过了,一直都很崇拜编程高手的女人


抵制日货,人人有责!
2007-10-29 13:43
PKER
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-10-18
收藏
得分:0 
以下是引用lqcheng在2007-10-27 8:40:33的发言:
楼主亲自输入试试。我的结果是2048,当然不对了。m=m-(m/2+1); m/2,若m是奇数(循环几次后有可能),结果就不对了。

把错误结果代进去后才理解
#include <stdio.h>
#define DAY 10
int main(void)
{
int i,n,m;
for(n=10;n<10000;n+=2)
{
m=n;
for(i=1;i<DAY;i++)
{
m=m-(m/2+1);
if(m%2!=0)break;//只要出现奇数就退出
}
if (m==1&&i==9) //判断最后1个是不是第10天剩下的
{
printf("%d",n);
break;
}
}
getchar ();
}
演算结果正确,不过不知道是不是凑出来的


抵制日货,人人有责!
2007-10-29 16:24
s119446775
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-4-25
收藏
得分:0 

# include <stdio.h>

main()
{
int i;
int n=1;
for(i=1;i<=10;i++)
{
n=2*(1+n); // 由(n=n-n/2-1)转换过来的
}
printf("%d\n",n);

}


这样行不?

2007-10-31 14:42
快速回复:[求助]猴子吃桃
数据加载中...
 
   



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

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