题目描述:
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
解题思路:
1.我们可以用数学问题反向推出答案,也就是从第n天回推到第1天的桃子数。
**规律:**倒数第二天的桃子数,是倒数第一天的2m+2(m为倒数第一天的桃子数量),即倒数第二天为2m+2;
第几天: N N-1 N-2 N-3 …
桃子剩余数:1 4 10 22
2.利用for循环来求出答案。
3.注意循环的开始终止条件(当然是可以更换的)
错误的思路:
1.由于受数学列方程的影响,想到可以正向推,但是当你在草稿本上写了之后,你就会发现补不能操作,于是便只能反向找规律!
注意事项:
1.注意for的循环次数。
2.注意桃子数 s 的算术式。
参考代码:
#include"iostream"
#include "cmath"
using namespace std;
int main(){
int N,sum=1;
cin>>N;
for(int i=N-1;i>0;i--){//初始是i=n-1,由于sum=1,已经是第N天了
sum=sum*2+2;//主要在于此规律的推导
}
cout<<sum;
return 0;
}