//猴子吃桃问题。猴子第1天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天又将剩下的桃子吃掉一般,又多吃了一个。
//以后每天都如此,到第10天时发现只剩下一个桃子了。试编程求第1天共摘下多少桃子
#include<iostream>
using namespace std;
//===================================
int main()
{
int a[11]={0};
a[10]=1;
for(int i=10;i>=2;i--)
a[--i]=2*a[i]+1;
cout<<"猴子第一天共摘桃子数为:"<<a[1]<<endl;
return 0;
}
參考答案:我用VISUAL C++6.0试了下 输出结果是1 啊,你再试试。
正确的编法如下:
#include<iostream>
using namespace std;
int main()
{
int a[11],i;
a[10]=1;
for(i=10;i>=1;i--)
a[i-1]=2*(a[i]+1);
cout<<"第一天猴子摘桃数目为"<<a[1];
return 0;
}
你的程序中有几个严重错误(虽然能通过编译),现分析下你的程序,int a[11]={0};相当于声明并赋值,包含了11个数的数组,每个数都为0(你定义了第一个为0,后面未定义 就默认为0);for循环中,“--i”是不对的,“--i”是先运算后赋值,i变为了i-1,从a[10]开始,a[--i]就是a[9],后面的a[i]也是a[9],已经说过数组的值全为0,2*a[9]+1为1;a[9]=1;判断后a[9]>=2;i--,i变为8;下次循环中a[i--]=1(就是i=i-1,i=7)直到a[2],a[1]=2*a[2]+1,a[1]=1;所以结果为 1.
其实算式应该是2*(a[i]+1)不是2*a[i]+1;具体看上面的程序吧。
还有注意声明与赋值。
写的比较罗嗦,不知你能看懂吗 ,呵呵。