華為程式設計題 汽水瓶

2021-08-02 00:26:06 字數 1328 閱讀 6193

(1)

[程式設計題] 汽水瓶

時間限制:1秒

空間限制:32768k

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

輸入描述:

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

輸出描述:

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

輸入例子:

3

1081

0

輸出例子:

1

540

思路:方法一:最常規的方法:在給定的數n時,逐步的求解,知道數不能在換汽水的時候。
#includeusing namespace std;

int solve(int &n, int &result)

if (n == 2)

result += n / 3;

n = n % 3 + n / 3;

solve(n, result);

}int main()

return 0;

}

思路2:這道題看起來比較複雜,三瓶換一瓶,如果只剩下最後兩瓶那麼跟老闆借一瓶喝了變成三個空瓶,最後把贈送的一瓶還給老闆。

但是從數學角度來說,開始count = 0;就是如果給定的數是偶數,每次減3加1相當於每次減2,count就要自加1,偶數減2計算到最後肯定是2,

也就是偶數瓶汽水最後都是剩下兩瓶實瓶,這樣就可以借一瓶變三個空瓶,還老闆乙個實瓶,恰好count==偶數/2;如果開始就是奇數瓶,那麼最後就剩下一瓶實瓶,

一瓶實瓶不可以等價的借一瓶變成三個空瓶再還了,所以得浪費,那麼問題又變成:奇數瓶-1=偶數瓶 的問題,又可以利用偶數瓶的方法解決。然而我們都知道,

在c++語言中除法運算是向下取整的,即3/2 = 1,因而變相的解決了奇數瓶的問題。所以這道題用了比較取巧的方法,直接瓶數除以2。

程式:#includeusing namespace std;

int main()

{

int n;

while(cin>>n){

cout<

華為 汽水瓶

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

汽水瓶 華為

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

程式設計題 汽水瓶

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