題目
有一羣海盜(不多於20人),在船上比拼酒量。過程如下:打開一瓶酒,所有在場的人平分喝下,有幾個人倒下了。
再打開一瓶酒平分,又有倒下的,再次重複……
直到開了第4瓶酒,坐着的已經所剩無幾,海盜船長也在其中。
當第4瓶酒平分喝下後,大家都倒下了。
等船長醒來,發現海盜船擱淺了。他在航海日誌中寫到:
“……昨天,我正好喝了一瓶…….奉勸大家,開船不喝酒,喝酒別開船……”
請你根據這些信息,推斷開始有多少人,每一輪喝下來還剩多少人。
如果有多個可能的答案,請列出所有答案,每個答案佔一行。
格式是:人數,人數,… 例如,有一種可能是:20,5,4,2,0
代碼
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d;
for (a=20;a>=4;a--)
{
for (b=a-1;b>=3;b--)
{
for (c=b-1;c>=2;c--)
{
for (d=c-1;d>=1;d--)
{
if ( 1.0/a+1.0/b+1.0/c+1.0/d == 1)
cout<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
}
}
}
}
}
析:
最後一瓶至少兩個人分,以每次倒一個人往前推。嵌套循環實現。