面試 面試題之汽水空瓶子問題

2021-07-30 23:10:28 字數 1100 閱讀 8048

一、題目描述

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

二、輸入描述

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

三、輸出描述

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

四、輸入輸出示例

輸入例子:

3   

10   

81   

0輸出例子:

1   

5   

40五、分析思路

1.按照三個瓶子為主要線索進行分析。

顯然,我們可以知道,假設有n個空瓶子,可以兌換的飲料瓶數為n/3瓶,還剩餘n - 3 * (n / 3) 個空瓶子。此時,由於兌換的汽水喝完後又會有新的空瓶子,所以進行一次兌換並且  喝完汽水後的空瓶子數量為t = n/3 + n - 3 * (n / 3),如果t = 0 或者 t = 1,則無法再兌換汽水,即問題結束;如果t = 2,則可以再兌換一瓶汽水,喝完了問題也就結束了;否則,又可以按照之前的思路進行下一步操作,即之前的n個空瓶子被替換成了n/3 + n - 3 * (n / 3),問題的規模發生了變化,思路沒有變化。很順其自然的,我們就想到了遞迴,使用遞迴來求解這個

問題。具體**如下: 

2.按照兩個瓶子為主要線索進行分析。

根據題意,有兩個空瓶子,就可以找老闆再要一瓶汽水,喝完後再兌換成飲料還給老闆。所以,我們可以知道,其實只要兩個瓶子就可以換一瓶汽水(不包含瓶子,該汽水喝完後的空瓶子不能再次進行兌換,可以看成喝完後就直接丟棄),所以問題就變得十分的簡單了。具體**如下:

六、總結

同樣乙個問題,換不同的思路可以有不同的解決辦法,第二種思路的**比第一種思路的**量少很多,所以,解決乙個問題時,思路往往是最重要的。謝謝各位園友**~

面試 面試題之汽水空瓶子問題

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

C 面試題之程式設計其他問題面試題

程式設計其他問題面試題.cpp main主函式執行完畢後,是否可能會再執行一段 給出說明。美國某著名網路開發公司2005年面試題 答案 如果需要加入一段在main退出後執行的 可以使用atexit 函式註冊乙個函式,如下 include int atexit void funtion void in...

C 面試題之i 面試題

i 面試題1.cpp 中國台灣某著名防毒軟體公司2005年10月面試題 int i 3,j 4 i?i j printf d d n i,j a.3 3 b.4 4 c.3 4 d.4 3 答案b i 面試題2.cpp 中國某著名計算機金融軟公司2005年面試題 int x 1,j 2 int k ...