題目描述
有這樣一道智力題:「某商店規定:三個空汽水瓶能夠換一瓶汽水。小張手上有十個空汽水瓶,她最多能夠換多少瓶汽水喝?」
答案是5瓶,方法以下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完之後4個空瓶子,用3個再換一瓶,
喝掉這瓶滿的,這時候剩2個空瓶子。而後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完之後用3個空瓶子換一瓶滿的還給老闆。
若是小張手上有n個空汽水瓶,最多能夠換多少瓶汽水喝?
輸入描述
輸入文件最多包含10組測試數據,每一個數據佔一行,僅包含一個正整數n(1<=n<=100),表示小張手上的空汽水瓶數。
n=0表示輸入結束,你的程序不該當處理這一行。
輸出描述
對於每組測試數據,輸出一行,表示最多能夠喝的汽水瓶數。若是一瓶也喝不到,輸出0。
輸入例子
3
10
81
0
輸出例子
1
5
40
算法實現
import java.util.Scanner;
/**
* Declaration: All Rights Reserved !!!
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
int num;
while (scanner.hasNextInt() && (num = scanner.nextInt()) != 0) {
System.out.println(bottle(num));
}
scanner.close();
}
private static int bottle(int num) {
final int BASE = 3;
if (num < BASE - 1 ) {
return 0;
}
int result = 0;
while (num > BASE - 1) {
// 本次喝的飲料數
int drink = num / BASE;
// 總共喝的飲料
result += drink;
// 手上目前有的瓶子
num = num % BASE + drink;
}
if (num == BASE - 1) {
// 若是還有bASE-1個瓶子,那就能夠再向老闆借一瓶,喝完就有三個瓶子
// 又能夠換一瓶,又多喝了一瓶
result++;
}
return result;
}
}