分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
八枚硬幣問題
問題描述:
在八枚外觀相同的硬幣中,有一枚是假幣,並且已知假幣與真幣的重量不同,但不知道假幣與真幣相比較輕還是較重。可以通過一架天平來任意比較兩組硬幣,設計乙個高效的演算法來檢測出這枚假幣。
解決思路:
假定輸入的八枚硬幣: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...