華為程式設計題---汽水瓶
阿新 • • 發佈:2019-02-06
有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是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時,逐步的求解,知道數不能在換汽水的時候。
#include<bits/stdc++.h> using namespace std; int solve(int &n, int &result){ if (n <= 1){ return result; zai } if (n == 2){ ++result; return result; } result += n / 3; n = n % 3 + n / 3; solve(n, result); } int main() { int n; while (cin >> n && n != 0) { int result=0; cout << solve(n, result) << endl; } return 0; }
思路2:這道題看起來比較複雜,三瓶換一瓶,如果只剩下最後兩瓶那麼跟老闆借一瓶喝了變成三個空瓶,最後把贈送的一瓶還給老闆。但是從數學角度來說,開始count = 0;就是如果給定的數是偶數,每次減3加1相當於每次減2,count就要自加1,偶數減2計算到最後肯定是2,也就是偶數瓶汽水最後都是剩下兩瓶實瓶,這樣就可以借一瓶變三個空瓶,還老闆一個實瓶,恰好count==偶數/2;如果開始就是奇數瓶,那麼最後就剩下一瓶實瓶,一瓶實瓶不可以等價的借一瓶變成三個空瓶再還了,所以得浪費,那麼問題又變成:奇數瓶-1=偶數瓶 的問題,又可以利用偶數瓶的方法解決。然而我們都知道,在c++語言中除法運算是向下取整的,即3/2 = 1,因而變相的解決了奇數瓶的問題。所以這道題用了比較取巧的方法,直接瓶數除以2。
程式:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n){
cout<<n/2<<endl;
}
return 0;
}