/*
* 有一群海盜(不多於20人),在船上比拼酒量。過程如下:開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複......
* 直到開了第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。
請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人。
如果有多個可能的答案,請列出所有答案,每個答案佔一行。
格式是:人數,人數,...
例如,有一種可能是:20,5,4,2,0
答案寫在「解答.txt」中,不要寫在這裡!
[解題思路]
此題有如下幾個特點:
1. 次數是固定的,總共有4次
2. 最後一輪的人(包括海盜船長的飲酒量是確定的,就是一瓶)
3. 每次都是一瓶酒平分,每次飲酒的人,包括海盜船長,的飲酒量都是1/當前輪次中的總人數
4. 初始人數不確定,僅知道不可能多於20人
本題最適合採用逆向的遞迴來實現
1. 設定乙個陣列,下標從0開始,其中的每個元素的內容表示每輪的人數
2. 初始值為0,儲存在下標為0的元素中.
3. 由後向前逆推,每欠嘗試上一輪的人數,嘗試時有這樣的一些準則:
1) 上一輪的人數必須比本輪的人數多
2) 上一輪人數不可能多於20人
4. 遞迴結束的條件:
1)到達了下標為4的元素
2)當前元素中的值不大於20
3)陣列中前5位值的總和為1
5. 遞迴遞進的條件
1) 當前的下標不為4
[解題流程]
1. 接受當前的人數陣列
2. 接受當前的下標值
3. 接受起始的人數值
4. 從當前起始的人數值開始計算,迴圈嘗試到20
每取乙個值時,判斷當前下標是否達到了4
是: 判斷陣列中表示的總的飲酒量是否為1
是: 輸出結果
否: 呼叫自身,再次嘗試下一步操作
[執行結果]
* */
public class winecaption
system.out.println();
}public static boolean calctotalwine(int wineloop)
public static void drink(int wineloop, int xb, int startnumber)
else
drink(wineloop,xb+1,i+1);}}
public static void main(string args)
}
藍橋杯 分酒
泊松是法國數學家 物理學家和力學家。他一生致力科學事業,成果頗多。有許多著名的公式定理以他的名字命名,比如概率論中著名的泊松分布。有一次閒暇時,他提出過乙個有趣的問題,後稱為 泊松分酒 在我國古代也提出過類似問題,遺憾的是沒有進行徹底探索,其中流傳較多是 韓信走馬分油 問題。有3個容器,容量分別為1...
海盜分酒(數學問題)
海盜分酒 題目描述 有一群海盜 不多於 20人 在船上比拼酒量。過程如下 開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複 直到開了第 4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第 4瓶酒平分喝下後,大家都倒下了。等船長醒來,發現海盜船擱淺了。他在航海日...
藍橋杯 海盜分金幣
有5個海盜,相約進行一次帆船比賽。比賽中天氣發生突變,他們被沖散了。恰巧,他們都先後經過途中的乙個無名的荒島,並且每個人都信心滿滿,覺得自己是第乙個經過該島的人。第乙個人在沙灘上發現了一堆金幣。他把金幣分成5等份。發現剛好少乙個金幣。他就從自己口袋拿出乙個金幣補充進去,然後把屬於自己的那份拿走。第二...