当前位置: 代码迷 >> C语言 >> [求助]猴子吃桃
  详细解决方案

[求助]猴子吃桃

热度:233   发布时间:2007-10-26 15:29:04.0
还是倒着想比较自然一些
----------------解决方案--------------------------------------------------------
等了这么久,有高手米啊?
----------------解决方案--------------------------------------------------------
#include"stdio.h"
fun(int n);
main()
{ int n,r;
while( scanf("%d",&n)==1&&n!=0)
{ r=fun(n);
printf("%d\n",r);
}
}
fun(int n)
{ if(n==1)
return 1;
else
return (fun(n-1)+1)*2;
}

----------------解决方案--------------------------------------------------------
应该用迭代法比较方便一些
----------------解决方案--------------------------------------------------------
你的思路可行,不过逆推法更好,下面是对你程序的更改。。。
#include <stdio.h>
#define DAY 10
#include <stdio.h>
#define DAY 10
int main(void)
{
int i,n,m,flag; //flag是用于倒计时天数的
for(n=10;n<10000;n+=2)
{
flag=11;
m=n;
for(i=1;i<=DAY;i++)
{
flag--;
m=m-1-m/2;
if(flag!=1&&m==1) break;
}
if(flag==1&&m==1) break;
}
printf("共摘了:%d个桃子",n);
}
----------------解决方案--------------------------------------------------------
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=10000;
}
}
getchar ();
楼主在for语句后面加了个分号,去掉分号就对了...

----------------解决方案--------------------------------------------------------

#include <stdio.h>
void main()
{
int i,n=0,m=1;
for(i=6;i>=1;i--)
{
n=m*2+2;
m=n;

printf("第%d天剩的桃子为%d\n",i,m);
}
}
//算法:迭代法

我这个是7天的


----------------解决方案--------------------------------------------------------

很多朋友都说逆推法好,但是作为新手我只是想尝试下不同的方法。
谢谢16楼的朋友指点迷津,也谢谢各位朋友,让我学到了更多的方法


----------------解决方案--------------------------------------------------------
[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是奇数(循环几次后有可能),结果就不对了。
----------------解决方案--------------------------------------------------------
刚才没看见第二页,
原来多了个分号啊,
不过我觉得穷举不对
----------------解决方案--------------------------------------------------------
  相关解决方案