海盜分酒
題目描述:
有一群海盜(不多於
20人),在船上比拼酒量。過程如下:開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複
......
直到開了第
4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第
4瓶酒平分喝下後,大家都倒下了。
等船長醒來,發現海盜船擱淺了。他在航海日誌中寫到:「
......
昨天,我正好喝了一瓶
.......
奉勸大家,開船不喝酒,喝酒別開船
......」
請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人。
如果有多個可能的答案,請列出所有答案,每個答案佔一行。
格式是:人數,人數
,...
方法一:列舉法
思想:假設
第一瓶酒a個人喝,第二瓶酒b個人喝,第三瓶酒c個人喝 ,第四瓶酒d個人喝,因為船長喝了一瓶,因為船長最後總共喝了1瓶
所以有1/a+1/b+1/c+1/d=1同時a>b>c>d
//海盜分酒
public class haidaofenjiu }}
}}}方法二:遞迴實現for迴圈,遞迴函式是第幾次喝酒的最多人數是m
public class haidaofenjiu
//第index喝酒時最多的人數是m
public static void f(int a,int index,int m)}}
else
else}}
}}方法三:另一種遞迴代替for迴圈的方法
又是乙個遞迴的題目,這次的是比較簡單了,但是還是要細心和注意一點技巧
這個題目簡單就簡單在人數不會超過20還有次數確定只有四次
還有就是老大最後才倒下,有這幾個條件那麼就簡單了!
直接用遞迴來搞定,
int find_ans(int rec,int now,int son,int mother)
rec來記錄次數,now來表示現在還剩下多少人,son分子,mother分母
這樣只要滿足son==mother還有rec==4就輸出這一組結果就完事了
我的寫法注定是從大到小不會不符合邏輯的!
package lilu.shuxue;
public class haidaofenjiu2
}//rec來記錄次數,now來表示現在還剩下多少人,son分子,mother分母
public static void f(int a,int rec,int now,int son,int mother)
}else}}
}方法二的遞迴和方法二的遞迴的不同之處就是方法二是在最後計算是否相等,方法三是在遞迴的過程中直接計算。
經典數學問題之 海盜分寶
什麼是海盜分寶問題呢?顧名思義,就是幾個海盜 如何分贓的問題。在分贓的過程中,依靠智慧型使自己所獲得利益最大化。海盜分寶問題的描述雖然非常簡單,然而,通過乙個人對這個簡單問題的分析與思考可以迅速的看出這個人的邏輯思維能力。同時,這個問題也曾經出現在微軟應聘的試卷中。簡單的描述與複雜的邏輯使它問題成為...
藍橋杯 java 海盜分酒
有一群海盜 不多於20人 在船上比拼酒量。過程如下 開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複.直到開了第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人。如果有...
數學問題 1000瓶酒找1毒酒
題目 某酒主人要宴請客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒後,會在一周後發作,現在如果我們用試紙進行檢測,滴了毒酒 的試紙會在1週後變色,問最少需要多少張試紙可以檢測出哪瓶有毒?解答 10張試紙即可。10張試紙按從左到右的順序一字排好,每瓶酒也編上號1到1000,並把編號轉換成10位二...