題目
描寫敘述:
有這樣一道智力題:“某商店規定:三個空汽水瓶能夠換一瓶汽水。
小張手上有十個空汽水瓶,她最多能夠換多少瓶汽水喝?”答案是5瓶,方法例如以下:先用9個空瓶子換3瓶汽水。喝掉3瓶滿的,喝完以后4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。
然后你讓老板先借給你一瓶汽水,喝掉這瓶滿的。喝完以后用3個空瓶子換一瓶滿的還給老板。
假設小張手上有n個空汽水瓶。最多能夠換多少瓶汽水喝?
題目類別: 循環
難度: 中級
執行時間限制: 10Sec
內存限制: 128MByte
階段: 入職前練習
輸入:
輸入文件最多包括10組測試數據。每一個數據占一行,僅包括一個正整數n(1<=n<=100),表示小張手上的空汽水瓶數。n=0表示輸入結束,你的程序不應當處理這一行。
輸出:
對於每組測試數據,輸出一行。表示最多能夠喝的汽水瓶數。假設一瓶也喝不到,輸出0。
例子輸入:
3
10
81
0
例子輸出:
1
5
40
代碼
/*--------------------------------------- * 日期:2015-06-29 * 作者:SJF0115 * 題目:汽水瓶 * 來源:華為上機 -----------------------------------------*/
#include <iostream>
using namespace std;
void helper(int &n,int &result){
if(n == 1){
return;
}//if
if(n == 2){
++result;
return;
}//if
result += n / 3;
n = n % 3 + n / 3;
helper(n,result);
}
int Drink(int n){
if(n <= 1){
return 0;
}//if
if(n == 2){
return 1;
}//if
int result = 0;
helper(n,result);
return result;
}
int main(){
int n;
//freopen("C:\\Users\\Administrator\\Desktop\\c++.txt","r",stdin);
while(cin>>n && n != 0){
cout<<Drink(n)<<endl;
}//while
return 0;
}