这个C++小程序的思路说下?

来源:百度知道 编辑:UC知道 时间:2024/05/31 12:05:10
#include<iostream.h>
int monkey(int i,int j)
{
if(i==1)return j;
else{
if(i>1){
i=i/2-1;
j++;
monkey(i,j);
}
else return 0;
}
}
void main()
{
for(int i=2;;i+=2){
int j=1;
if(monkey(i,j)==10){
cout<<i<<endl;
break;
}
}
}
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又
多吃了一个。以后每天早上都吃了前一天剩下的一半另加
一个。到第10天早上想再吃时,就只剩下一个桃子了。求
第一天共摘了多少桃子?

这个程序还是比较巧妙的。你要注意定义的函数的返回值是j,也就是天数。也就是最后把桃子吃完时的天数。所以,从小到大依次判断,如果按照要求的吃法正好10天吃完那就对了。如果我写的话,我肯定想不到。我会这么写:
#include<iostream.h>
int monkey(int i,int j)
{
int s=i;
for(int k=0;k<j-1;k++)
s=(s+1)*2;
return s;
}
void main()
{
cout<<monkey(1,10)<<endl;
}
结果是相同的,虽然我的程序看起来更简洁,但你的这个程序的思路是比较巧妙的。

吃一半是不是,有时候吃半个啊。