題目描述: 有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完以後用3個空瓶子換一瓶滿的還給老闆。如果小張手上有n個空汽水瓶,最多可以換多少瓶汽水喝?
本題思路:仔細分析題目,可以發現,剩餘1個或者0個空瓶時,不能換購;剩餘2個時可以換購1瓶;那麼就可以使用遞歸的方法進行,直至最後剩餘1個或者0個或者2個;
#include<iostream>
#include<vector>
using namespace std;
int exchange(int n)
{
int emp=n;
if(emp==1||emp==0)
return 0;
if(emp==2)
return 1;
return (emp/3+exchange(emp/3+emp%3));
}
int main()
{
int n;
vector<int>vt;
while(cin>>n)
{
if(n>=1&&n<=100)
vt.push_back(n);
if(cin.get()==0)
break;
}
for(int i=0;i<vt.size();i++)
{
cout<<exchange(vt[i])<<endl;
}
return 0;
}