藍橋杯預賽真題 比酒量(窮舉)

2021-08-14 22:38:22 字數 1342 閱讀 4232

題目描述:

有一群海盜(不多於20人),在船上比拼酒量。過程如下:開啟一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再開啟一瓶酒平分,又有倒下的,再次重複...... 直到開了第4瓶酒,坐著的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。

等船長醒來,發現海盜船擱淺了。他在航海日誌中寫到:「......昨天,我正好喝了一瓶.......奉勸大家,開船不喝酒,喝酒別開船......」

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

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

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

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

答案寫在「解答.txt」中,不要寫在這裡!

問題分析:

有幾個重要條件:

1.每次喝都有人倒下

2.喝最後一瓶之前不只船長乙個人沒倒下(即最後一次所剩人數》=2)

3.船長一共喝了一瓶(重點在於船長說的那句話:「我正好喝了一瓶」,由這個條件我們就可以單獨考慮船長,船長每次喝人均喝的量最後加起來就是1。)

模擬這四次喝酒:

開始一共n個人

第一次:

每人喝了1/n份酒,倒下a個人,剩下n-a個人

第二次每人喝了1/(n-a)份酒,倒下b個人,剩下n-a-b個人

第三次每人喝了1/(n-a-b)份酒,倒下c個人,剩下n-a-b-c個人

第四次每人喝了1/(n-a-b-c)份酒,剩下0個人

要求的就是n-a、n-a-b、n-a-b-c這三個數;

首先,因為最後一次不只是船長乙個人倒下,就是說喝第四瓶酒之前至少有2個人,假設每喝一次倒下乙個,那最少也需要5個人。

最多不超多20(題目給的條件),那麼n的取值範圍是(4

**:

#includeusing namespace std;

int main()

{ float n;

float a,b,c;

float s1,s2,s3;

for(n=5;n<=20;n++)//海盜總人數

{for(a=1;a<=n;a++)//第一輪醉倒的人數

for(b=1;b<=n;b++)//第二輪醉倒的人數

for(c=1;c<=n;c++)//第三輪醉倒的人數

{s1=n-a;

s2=n-a-b;

s3=n-a-b-c;

if(1/n+1/s1+1/s2+1/s3==1&&s1>0&&s2>0&&s3>0)

cout<

藍橋杯 比酒量

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

海盜比酒量 藍橋杯

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

藍橋杯備戰 海盜比酒量

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