題目描述:有一群海盜(不多於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瓶酒平分喝下後,大家都倒下了。請你根據這些資訊,推斷開始有多少人,每一輪喝下來還剩多少人...