問題 1072: 汽水瓶 時間限制: 1Sec 記憶體限制: 128MB 題目描述 有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶, 方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這 ...
問題 1072: 汽水瓶
時間限制: 1Sec 記憶體限制: 128MB
題目描述 有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,
方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一瓶汽水,
喝掉這瓶滿的,喝完以後用3個空瓶子換一瓶滿的還給老闆。如果小張手上有n個空汽水瓶,最多可以換多少瓶汽水喝? 輸入 輸入文件最多包含10組測試數據,每個
數據占一行,僅包含一個正整數n(1<=n<=100),表示小張手上的空汽水瓶數。n=0表示輸入結束,你的程式不應當處理這一行。 輸出 對於每組測試數據,輸出一
行,表示最多可以喝的汽水瓶數。如果一瓶也喝不到,輸出0。
樣例輸入 3 10 81 0
樣例輸出 1 5 40
提示 無
來源 湖南省第六屆大學生電腦程式設計競賽
解法一:
思路:
第一輪:
瓶子數 可以兌換 剩下的
n n/3 n%3
第二輪:
n=n/3+n%3 n/3 n%3
...
n<3時停止迴圈 但如果n==2可以多喝一瓶
1 #include <stdio.h> 2 3 int main(void) 4 { 5 int count=0; 6 int n; 7 int rest=0; 8 9 while (scanf("%d", &n) && n) 10 { 11 do 12 { 13 count += n/3; 14 rest += n%3; 15 n = n/3 + n%3; 16 } while (n/3); 17 if (n == 2) 18 { 19 count++; 20 } 21 printf("%d\n", count); 22 count = 0; 23 rest = 0; 24 } 25 26 return 0; 27 }
解法二:
列舉一些結果可以發現兌換的數目等於瓶子數目的一半
1 #include<stdio.h> 2 3 int main(void) 4 { 5 int n; 6 while (scanf("%d", &n) && n) 7 { 8 printf("%d\n", n/2); 9 } 10 11 return 0; 12 }