華為機試題2[編程題] 汽水瓶


[編程題] 汽水瓶

有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空 汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以后4個空瓶子,用3個再換一瓶,喝掉這瓶滿 的,這時候剩2個空瓶子。然后你讓老板先借給你一瓶汽水,喝掉這瓶滿的,喝完以后用3個空瓶子換一瓶滿的還給老板。如果小張手上有n個空汽水瓶,最多可以 換多少瓶汽水喝?

 

輸入描述:

輸入文件最多包含10組測試數據,每個數據占一行,僅包含一個正整數n(1<=n<=100),表示小張手上的空汽水瓶數。n=0表示輸入結束,你的程序不應當處理這一行。


輸出描述:

對於每組測試數據,輸出一行,表示最多可以喝的汽水瓶數。如果一瓶也喝不到,輸出0。

輸入例子:
3
10
81
0
輸出例子:
1
5
40
先說說思路:這道題看起來比較復雜,三瓶換一瓶,如果只剩下最后兩瓶那么跟老板借一瓶喝了變成三個空瓶,最后把贈送的一瓶還給老板。
但是從數學角度來說,開始count = 0;就是如果給定的數是偶數,每次減3加1相當於每次減2,count就要自加1,偶數減2計算到最后肯定是2,
也就是偶數瓶汽水最后都是剩下兩瓶實瓶,這樣就可以借一瓶變三個空瓶,還老板一個實瓶,恰好count==偶數/2;如果開始就是奇數瓶,那么最后就剩下一瓶實瓶,
一瓶實瓶不可以等價的借一瓶變成三個空瓶再還了,所以得浪費,那么問題又變成:奇數瓶-1=偶數瓶 的問題,又可以利用偶數瓶的方法解決。然而我們都知道,
在java語言中除法運算是向下取整的,即3/2 = 1,因而變相的解決了奇數瓶的問題。所以這道題用了比較取巧的方法,直接瓶數除以2。





import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        do{
            int a = s.nextInt();
            int count = 0;             

            if(a==0)
                return;
            else if(a == 2)
                System.out.println("1");
            else if(a==1)
                System.out.println("0");
            else{
                    count = a/2;
                    System.out.println(count);
                }
                }while(s.hasNext());
        s.close();
          }
        
    }  

 


免責聲明!

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



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