简单的c++问题,为什么我的做法有错误~~

来源:百度知道 编辑:UC知道 时间:2024/06/15 21:23:55
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的
一半零一个。到第10天早上想再吃时,就只剩下一个桃子了。求第一天共摘了多少桃子。
我的做法:
#inculde<iostream>
using namespace std;
int main()
{float n,s;
for(s=1;s>0;s++)
{for(n=1;n<=10;n++)
s=s-(s/2+1);
if(s==1) cout<<"s="<<s<<endl;
break;
}
return 0;
}

你的思路是从1开始搜索,直到遇到有一个自然数,符合题意,就输出。
————
程序有几处问题:你的s本来应该是1,2,3,4,…… 这样变化的自然数序列,你的程序里s=s-(s/2+1); 修改了s的值。
试试改成用另外一个临时值t, 然后t=s, 对t进行t-(t/2+1)模拟。

另外按你的思路, break的条件应该是 当t==1时, 中括号应该包括 break;
if(t==1.0) { cout<<s<<endl; break }
————

试试这段
#include<iostream>
using namespace std;
int main()
{
float v;

for(int s=1;;s++)
{
v=(float)s;
for(int n=1;n<=10;n++)
v=v-(v/(float)2+1);
if(v==1.0)
{
cout<<"s="<<s<<endl;
break;
}
}
return 0;
}

1 4 10 22 46 94 190 382 766 1534

【程序】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。
2.程序源代码:
main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;/*第一天的桃子