藍橋杯——2012年C++A組第3題:海盜比酒量【枚舉】

一、題目

    有一羣海盜(不多於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;
}

 

四、結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章