喝汽水
有這樣一道智力題:“某商店規(guī)定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以后4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然后你讓老板先借給你一瓶汽水,喝掉這瓶滿的,喝完以后用3個空瓶子換一瓶滿的還給老板。如果小張手上有n個空汽水瓶,最多可以換多少瓶汽水喝?
輸入描述:
輸入文件最多包含10組測試數(shù)據(jù),每個數(shù)據(jù)占一行,僅包含一個正整數(shù)n(1<=n<=100),表示小張手上的空汽水瓶數(shù)。n=0表示輸入結(jié)束,你的程序不應當處理這一行。
輸出描述:
對于每組測試數(shù)據(jù),輸出一行,表示最多可以喝的汽水瓶數(shù)。如果一瓶也喝不到,輸出0。
輸入例子:
3
10
81
0
輸出例子:
1
5
輸入描述:
輸入文件最多包含10組測試數(shù)據(jù),每個數(shù)據(jù)占一行,僅包含一個正整數(shù)n(1<=n<=100),表示小張手上的空汽水瓶數(shù)。n=0表示輸入結(jié)束,你的程序不應當處理這一行。
輸出描述:
對于每組測試數(shù)據(jù),輸出一行,表示最多可以喝的汽水瓶數(shù)。如果一瓶也喝不到,輸出0。
輸入例子:
3
10
81
0
輸出例子:
1
5
40
思路:
n ? ? ? ? ? ? a(喝的甁數(shù)) ? ? ? ? ? ??b(空瓶數(shù))
3 ? ? ? ? ? ? ? 3/3=1 ? ? ? ? ? ? ? ??3/3+3%3=1
5 ? ? ? ? ? ? ? 第一次 5/3=1 ? ?? 5/3+5%2=3
? ? ? ? ? ? ? ? 第二次 ?3/3=11
? ? ? ? ? ? ? ? ? ? 共2
6 ? ? ? ? ? ? ? 第一次6/3=2 ? ? ? ? 6/3+6%3=2 ? ? (借一瓶)
? ? ? ? ? ? ? ? ?第二次 ? 1 ? ? ? ? ? ? ? ? ?0
7 ? ? ? ? ? ? ? 第一次 7/3=2 ? ? ? ?7/3+7%3=3
? ? ? ? ? ? ? ? ?第二次 3/3=11
? ? ? ? ? ? ? ? ? ? 共3
10 ? ? ? ? ? ? 第一次 ?10/3=3 ? ? ? 10/3+10%3=4
? ? ? ? ? ? ? ? ?第二次 ? 4/3=1 ? ? ? ? ? 4/3+4%3=2(借一瓶)
? ? ? ? ? ? ? ? ?第三次 ? ?+1 ? ? ? ? ? ? 0
? ? ? ? ? ? ? ? ? ? ?共5
可見,每次剩余空瓶數(shù)是0或者1時不能再換了,是2時可以借一瓶,還能在喝一瓶
關鍵代碼是:
n=s.nextInt();c=0;while(n!=0&&n!=1){a=n/3;b=n/3+n%3;n=b;c+=a;if(n==2){c++;break;}}
<span style="font-size:24px;">import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner s=new Scanner(System.in);int n,a,b,c;while(s.hasNext()){n=s.nextInt();c=0;while(n!=0&&n!=1){a=n/3;b=n/3+n%3;n=b;c+=a;if(n==2){c++;break;}}System.out.println(c);}}} </span>
總結(jié)
- 上一篇: Android网络编程使用HttpCli
- 下一篇: Android网络编程的Socket通信