演算法設計 八枚硬幣問題

2021-08-31 12:37:03 字數 2569 閱讀 3119

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

八枚硬幣問題

問題描述:

在八枚外觀相同的硬幣中,有一枚是假幣,並且已知假幣與真幣的重量不同,但不知道假幣與真幣相比較輕還是較重。可以通過一架天平來任意比較兩組硬幣,設計乙個高效的演算法來檢測出這枚假幣。

解決思路:

假定輸入的八枚硬幣:a、b、c、d、e、f、g、h

實驗解決思路:把硬幣分成三組,從八枚硬幣中任取六枚a、b、c、d、e、f,在天平兩端各放三枚進行比較。 假設a、b、c三枚放在天平的一端,d、e、f三枚放在天平的另一端,可能出現如圖所示的三種比較結果。

實驗步驟:

1.      將硬幣分為3組:a,b,c、d,e,f、g,h,

2.      分別取a,b,c、d,e,f 放在天平的兩側,現在假設硬幣abc重於def,這說明這兩組中有一組包含一枚假幣,但不確定是在左側,還是右側。

3.      由上面的我們已經知道假幣在前面兩組了,那麼剩下的那組的兩枚硬幣應該是相等的,我們取其中一枚作為考量值,這裡取g硬幣。取左側的一枚硬幣:a硬幣,再取右側的一枚硬幣:e硬幣,把ae作為新左側的硬幣組合,再取右側的一枚硬幣:d硬幣+考量值:g硬幣作為新右側組合。如果出現重量不等,則可確定:這兩組中的一組存在一枚假幣,但具體是哪一枚還沒有確定。

4.      我們可以通過把a、e、d分別於h比較,假如與h不一樣,則這枚硬幣為假幣,並且可以確定這枚假幣是重還是輕。整個解決思路就是這樣。

5.      最後結果e與h比較,e不等於h重量,並且較輕,e為最終結果。

**實現:

#include

using

namespace

std;//函式宣告

void

eightcoin

(int arr)

;void

compare

(int a, int b,int real, int index1,int index2)

;void

print

(int jia, int zhen, int i)

;int

main

() eightcoin(arr); system("pause"); return

0;}/***  八枚硬幣問題描述:*,有一枚是假幣,並且已知假幣與真幣的重量不同*,但不知道假幣與真幣相比較輕還是較重。可以通過一架天平來任意比較兩組硬幣*,設計乙個高效的演算法來檢測出這枚假幣* @date:2013/4/27* @author:wwj*/

void

eightcoin

(int arr)

else

if((a + e) == (d + b))    else   } else

if(abc == def) //假幣在g,h之中,最好狀態    else   } else

//abc < def 這兩組存在一枚假幣,g,h為真幣   else

if((a + e) == (d + b))    else   }}/*** 取出可能有一枚假幣的兩枚假幣,作為引數a和引數b* real表示真幣的重量,index1為第一枚硬幣的下標,index2為第二枚硬幣的下標*/

void

compare

(int a, int b,int real, int index1,int index2)

else }void

print

(int jia, int zhen, int i)

else }

驗證結果:

給我老師的人工智慧教程打call!

八枚硬幣問題

1.問題描述 設有八枚硬幣,分別表示為a b c d e f g h,其中有且僅有一枚硬幣是假幣,並且假幣的重量與真幣的重量不同,可能輕,也可能重。現要求以天平為工具,用最少的比較次數挑選出假幣,並同時確定這枚假幣的重量比其它真幣是輕還是重。2.解題思路 八枚硬幣的判定過程可以用樹結構來描述。把硬幣...

我的八枚硬幣問題

實驗專案3 8枚硬幣問題 1.問題分析 這個問題就是要找出這八枚硬幣中放入假幣,前提是還不知道是偏重還是偏輕,所有,要設計乙個高效的演算法找出這麼假幣,並且得知是偏重還是偏輕。假定輸入的八枚硬幣 a b c d e f g h 把硬幣分成三組,從八枚硬幣中任取六枚a b c d e f,在天平兩端各...

八枚硬幣(c python略)

八枚硬幣 現有八枚銀幣a b c d e f g h,已知其中一枚是假幣,其重量不同於真幣,但不知是較輕或較重,如何使用天平以最少的比較次數,決定出哪枚是假幣,並得知假幣比真幣較輕或較重。printf 請輸入八枚硬幣的質量 for int i 0 i 8 i for int j 0 j 8 j ge...