题目描述: 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是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;
}