[華為機試練習題]8.汽水瓶


題目

描寫敘述:
有這樣一道智力題:“某商店規定:三個空汽水瓶能夠換一瓶汽水。

小張手上有十個空汽水瓶,她最多能夠換多少瓶汽水喝?”答案是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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM