[經典演算法] 八枚硬幣

來源:互聯網
上載者:User

標籤:

題目說明:

現有八枚銀幣a b c d e f g h,已知其中一枚是假幣,其重量不同於真幣,但不知是較輕或較重,如何使用天平以最少的比較次數,決定出哪枚是假幣,並得知假幣比真幣較輕或較重。

 

題目解析:

單就求假幣的問題是不難,但問題限制使用最少的比較次數,所以我們不能以單純的迴圈比較來求解,我們可以使用決策樹(decision tree),流量分析與樹狀圖來協助求解。
一個簡單的狀況是這樣的,我們比較a+b+c與d+e+f ,如果相等,則假幣必是g或h,我們先比較g或h哪個較重,如果g較重,再與a比較(a是真幣),如果g等於a,則g為真幣,則h為假幣,由於h比g輕而 g是真幣,則h假幣的重量比真幣輕。
完整的比較決策樹如所示:

  程式碼:

#include<iostream>using namespace std;#define M_COIN_SIZE 8int Coins[M_COIN_SIZE];void CompareCoin(int i, int j, int k){    if (Coins[i] > Coins[k])    {        cout << "Fate Coin " << i+1 << " Weighter" << endl;    }    else    {        cout << "Fate Coin " << j+1 << " Lighter" << endl;    }}void EightCoins(){    /// a+b+c == d+e+f    if (Coins[0]+ Coins[1] + Coins[2] == Coins[3]+Coins[4]+Coins[5])    {        /// g ? h        if (Coins[6] > Coins[7])        {            CompareCoin(6,7,0);        }        else        {            CompareCoin(7,6,0);        }    }    else if (Coins[0]+ Coins[1] + Coins[2] > Coins[3]+Coins[4]+Coins[5])    {        /// a+d ? b+e        if (Coins[0]+Coins[3] > Coins[1]+Coins[4])        {            CompareCoin(0,4,1);        }        else if(Coins[0]+Coins[3] == Coins[1]+Coins[4])        {            CompareCoin(2,5,0);        }        else        {            CompareCoin(1,3,0);        }    }    else    {        /// a+d ? b+e        if (Coins[0]+Coins[3] > Coins[1]+Coins[4])        {            CompareCoin(3,1,0);        }        else if(Coins[0]+Coins[3] == Coins[1]+Coins[4])        {            CompareCoin(5,2,0);        }        else        {            CompareCoin(4,0,1);        }    }}int main(){    for (int i=0; i<8; ++i)    {        cin >> Coins[i];    }    EightCoins();    return 0;}
引用擴充:

12枚硬幣計算問題,以及N枚硬幣最少次數問題。

《用AO*演算法求解一個智力難題》,《硬幣問題的一種通用解決方案》

[經典演算法] 八枚硬幣

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.