[編程題] 汽水瓶
有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空 汽水瓶,她最多可以換多少瓶汽水喝?”答案是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(); } }