有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
以下代码均根据个人逻辑独立实现,空间或效率未必最优,欢迎批评指正。
#include <vector>
#include <iostream>
using namespace std;
int main()
{
int inNum;
int outNum;
int restNum = 0;
vector<int> outResult;
int index = 0;
while (cin>>inNum)
{
outNum = 0;
//如果输入为0, 输出0;
if(inNum<0)
{
cout<<"Input Number is Wrong!"<<endl;
return -1;
}
else if(inNum == 0)
{
//cout<<outNum<<endl;
//outResult.push_back(outNum);
break;
}
else
{
restNum = inNum;
while(restNum > 2)
{
outNum += restNum/3;
restNum = restNum/3 + restNum%3;
}
if(restNum == 2)
{
outNum++;
}
//cout<<outNum<<endl;
outResult.push_back(outNum);
index++;
}
}
for (int i=0; i<index; i++)
{
cout<<outResult[i]<<endl;
}
return 0;
}