藍橋杯 java 海盜分酒

2021-06-27 08:48:40 字數 1318 閱讀 9569

/*

* 有一群海盜(不多於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等份。發現剛好少乙個金幣。他就從自己口袋拿出乙個金幣補充進去,然後把屬於自己的那份拿走。第二...