藍橋杯 比酒量

2021-07-25 23:29:28 字數 1475 閱讀 7030

題目:

有一群海盜(不多於20人),在船上比拼酒量。過程如下:開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複...... 直到開了第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。等船長醒來,發現海盜船擱淺了。他在航海日誌中寫到:「......昨天,我正好喝了一瓶.......奉勸大家,開船不喝酒,喝酒別開船......」 

請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人。 

如果有多個可能的答案,請列出所有答案,每個答案佔一行。 

格式是:人數,人數,... 

例如,有一種可能是:20,5,4,2,0。

分析:根據題目描述,可以分析出題目的需求是要找到4個分數之和等於1,並且這4個分數的分子都是1,需要我們通過程式設計找到分母。

思路:不多於20人,總人數不確定,但不會大於20個人,從20開始往前窮舉,假設第一次(也就是a)是20人,在窮舉bcd,因為船長每輪喝酒都參加了,而他又說他剛好喝了一瓶酒,則他在每次比酒的時候平分給他的酒之和應該是等於1的,由於是浮點數,運算時都要加上.0;

**:#includeusing namespace std;

int main()

{ int a,b,c,d;

for (a=20;a>=1;a--)

for (b=a-1;b>=1;b--)

for (c=b-1;c>=1;c--)

for (d=c-1;d>=1;d--)

{ if (1.0/a+1.0/b+1.0/c+1.0/d==1.0)

{cout<

下面介紹兩種比較方法:

1.兩數絕對值之差比自己規定的乙個很小的數還要小,則等式成立。(這才是比較浮點數是否相等的可靠方法)

#include#include#define min 0.000001 //巨集定義乙個比較小的數

using namespace std;

int main()

{ int a,b,c,d;

for (a=20;a>=1;a--)

for (b=a-1;b>=1;b--)

for (c=b-1;c>=1;c--)

for (d=c-1;d>=1;d--)

{ if (fabs(1.0/a+1.0/b+1.0/c+1.0/d - 1.0) < min)

{cout<

2.將兩式數值全都變成整數在進行比較

#include#includeusing namespace std;

int main()

{ int a,b,c,d;

for (a=20;a>=1;a--)

for (b=a-1;b>=1;b--)

for (c=b-1;c>=1;c--)

for (d=c-1;d>=1;d--)

{ if (b*c*d+a*c*d+a*b*d+a*b*c == a*b*c*d) //轉為整數

{cout<

海盜比酒量 藍橋杯

這是2012年藍橋杯全國軟體大賽預賽的第三題,情景是海盜喝酒,問題是每瓶酒後未倒下的人數。有一群海盜 不多於20人 在船上比拼酒量。過程如下 開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複.直到開了第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平...

藍橋杯備戰 海盜比酒量

題目 有一群海盜 不多於20人 在船上比拼酒量。過程如下 開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複.直到開了 第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人...

2012藍橋杯C 本科 比酒量

有一群海盜 不多於20人 在船上比拼酒量。過程如下 開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複.直到開了第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人。如果有...