题目描述
有只猴子,奇数天吃桃子的一半又加三颗,偶数天吃桃子的一半又加一颗。最后剩一颗桃子,输入n为天数,输出一共吃了多少颗桃子
如,n=4,吃了42颗。
题目分析
可以递归做,也可以迭代做,逆向的的推回去就可以了。只是要判断省一颗桃子那天是奇数还是偶数天。
样例中,第一天,42,第二天,18,第三天,8,第四天,1。
所以用n%2就可以判断出当天是奇数还是偶数
#include <iostream>
using namespace std;
int even(int sum)//偶数
{
sum+=1;
sum*=2;
return sum;
}
int odd(int sum)//奇数
{
sum+=3;
sum*=2;
return sum;
}
int main()
{
int n,sum=1;
cin>>n;
int flag=n%2;
if(flag==1)
{
for(int i=0;i<n-1;i++)
{
sum=even(sum);
++i;
if(i<n-1) sum=odd(sum);
}
}
else
{
for(int i=0;i<n-1;i++)
{
sum=odd(sum);
++i;
if(i<n-1) sum=even(sum);
}
}
cout <<sum<< endl;
//cout << "Hello world!" << endl;
return 0;
}
也可以通过标记变量来判断奇偶
int cal(int days){
int sum=1;//最后一天剩下的桃子数为1
for(int i=days-1;i>0;i--){//从倒数第二天开始
if(i%2==1){//奇数天
sum=(sum+3)*2;
}else{//偶数天
sum=(sum+1)*2;
}
}
return sum;
}