一、題目
有一羣海盜(不多於20人),在船上比拼酒量。過程如下:打開一瓶酒,所有在場的人平分喝下,有幾個人倒下了。再打開一瓶酒平分,又有倒下的,再次重複...... 直到開了第4瓶酒,坐着的已經所剩無幾,海盜船長也在其中。當第4瓶酒平分喝下後,大家都倒下了。
等船長醒來,發現海盜船擱淺了。他在航海日誌中寫到:“......昨天,我正好喝了一瓶.......奉勸大家,開船不喝酒,喝酒別開船......”
請你根據這些信息,推斷開始有多少人,每一輪喝下來還剩多少人。
如果有多個可能的答案,請列出所有答案,每個答案佔一行。
格式是:人數,人數,...
例如,有一種可能是:20,5,4,2,0
答案寫在“解答.txt”中,不要寫在這裏!
二、思路
注意看關鍵的一句話“當第四瓶酒喝下,大家都倒下了。”——意味着只進行了四輪。
還有“船長最後正好喝了一瓶。”——意味着四輪下來船長一共喝了一瓶。
設第一輪有a人,第二輪有b人,第三輪有c人,第四輪有d人。
有1/a+1/b+1/c+1/d=1。
變形得到—— bcd+acd+abd+abc=abcd。
接下來進行枚舉就可以得到答案。
注意“不多於20人”,作爲循環界限
三、題解
#include <iostream> using namespace std; int main() { for(int a=20;a>=0;a--) { for (int b=a-1;b>=0;b--) { for (int c=b-1;c>=0;c--) { for(int d=c-1;d>=0;d--) { if(b*c*d + a*c*d + a*b*d + a*b*c == a*b*c*d) { cout << a << "," << b << "," << c << "," << d <<",0"<< endl; } } } } } return 0; }
四、結果