換汽水(華為程式設計題)
看到華為有一道換汽水的程式設計題,分享如下:
題目:某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?答案是5瓶,方法如下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完以後用3個空瓶子換一瓶滿的還給老闆。如果小張手上有n個空汽水瓶,最多可以換多少瓶汽水喝?
題目要求的輸入是這樣的:第一行表示對少個空瓶能夠換一瓶汽水;然後有多行輸入,算出每行輸入的空瓶數最多能夠換購的汽水數。(這裡我們並不侷限於10次以內輸入)
好了我們分析一下怎麼做:
如果b個空瓶能夠換一瓶汽水,那麼當我們擁有的空瓶數小於b-2的時候是換不到汽水的(即使向老闆借一瓶也不夠);
如果我們擁有的空瓶數n=b-1,這時候就可以通過向老闆借一瓶汽水,然後喝完將所有的空瓶還給老闆來償還剛剛接的那瓶汽水,這樣可以喝到一瓶汽水;
如果我們手上的空瓶n>=b呢?我們可以拿儘可能多的空瓶即(n/b)*b個換來n/b瓶汽水,喝完換來的汽水的時候空瓶數為:n%b+n/b;
然後就可以利用遞迴的思想,再拿手上的空瓶去換購。
從上面的分析中可以發現,遞迴的結束條件是:手上的所有空瓶數小於等於b-2。
程式碼實現如下:
import java.util.Scanner;//用於獲得輸入
import java.util.ArrayList;
public class QiShui
{
static int base, count;//用於記錄多少個空瓶換一瓶汽水和一共喝到的汽水數
public static void main(String[] args)
{
ArrayList<Integer> num1 = new ArrayList<Integer>();//用於記錄輸入
Scanner in = new Scanner(System.in);
int tmp, number;//用於記錄臨時值和要計算的次數
while (true)
{
tmp = in.nextInt();
//判斷輸入是否結束
if (tmp == 0)
{
break;
}
num1.add(tmp);//這裡有一個int到Integer的轉換
}
base = num1.get(0);//獲得多少空瓶換一瓶汽水
number = num1.size();//獲得要計算的數值個數
for (int i = 1; i < number; i++)
{
count = 0;
fun(num1.get(i));
System.out.println(count);
}
}
public static void fun(int n){
if(n <= base - 2)
{
return;
}
else if(n == base - 1)
{
count++;
return;
}
else
{
count = count + n / base;
fun(n / base + n % base);//遞迴呼叫
}
}
}
相關文章
- 華為研發工程師程式設計題:汽水瓶 [python]工程師程式設計Python
- 【程式設計師面試金典】三個空汽水瓶可以換一瓶汽水。程式設計師面試
- 華為程式設計題-加密解密程式設計加密解密
- 實驗一原型設計-汽水音樂app原型APP
- 【面試】面試題之汽水空瓶子問題面試題
- 華為程式設計規範,程式碼驗收標準。程式設計
- 華為程式設計師面試要改:網上程式設計 90 分鐘,現場程式設計 30 分鐘程式設計師面試
- JS程式設計題JS程式設計
- 程式設計題求解程式設計
- C程式設計題C程式程式設計
- go程式設計題Go程式設計
- 華為研發工程師程式設計題:明明的隨機數 [python]工程師程式設計隨機Python
- Linux Shell程式設計(28)——程式替換Linux程式設計
- 那些拿命換錢的程式設計師,換著換著還是要讀一讀《程式設計師健康指南》程式設計師
- 筆試題目——程式設計題筆試程式設計
- 程式碼設計問題
- 【程式設計題】黑白卡片程式設計
- [程式設計題] 序列交換程式設計
- 無題程式設計師程式設計師
- 程式設計題目解析程式設計
- python程式設計怎麼換行Python程式設計
- 從CRUD程式設計切換到事件溯源和區塊鏈程式設計程式設計事件區塊鏈
- 華為大佬:做一個快樂的程式設計師程式設計師
- Android 程式設計下設定 Activity 切換動畫Android程式設計動畫
- Java程式設計__Chap3 面對物件__程式設計題Java程式設計物件
- 黑馬程式設計師——型別轉換程式設計師型別
- Linux Shell程式設計(24)——命令替換Linux程式設計
- 程式設計師的時間換算表程式設計師
- 換一種態度看程式設計師!程式設計師
- 程式設計題-兩數相加程式設計
- JS中的程式設計題JS程式設計
- 程式設計面試題釋出程式設計面試題
- 程式設計文化的問題程式設計
- 程式設計題:報數遊戲程式設計遊戲
- PHP程式設計師面試題PHP程式設計師面試題
- 順序程式設計習題程式設計
- c語言程式設計題C語言程式設計
- 計科190405程式設計題解程式設計