日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 假币问题_减治法解决假币问题

發布時間:2023/12/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 假币问题_减治法解决假币问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

識別假幣問題:在n枚外觀相同的假幣中,有一枚是假幣。在一架天平上,我們可以比較任意兩組假幣。也就是說,通過觀察天平是向右傾、向左傾還是停在當中,我們可以判斷出兩組硬幣重量是否相同,或者哪一組比另一組更重,但是我們不知道重多少。問題是:設計一種有效的算法來檢測出這枚假幣。

簡化版本:已知假幣相對真幣較輕或者較重;

普通版本:不知道假幣輕還是重

除了每次把硬幣分為2份的辦法,還可以用更加高效的把硬幣分為三堆,每堆n/3個硬幣,在比較了兩堆硬幣的重量之后我們可以把實例的規模小區一個因子3. 相應的,我們可以期望稱重的次數大約會是log3 n

設計一種可以處理任何是或不是3的倍數個硬幣的算法

偽代碼如下:

每次平均分三堆的結果可能有:余數0 余數1 余數2

如果余數0:

平均分,任選兩堆(堆1+堆2)比較,

如果平衡:

堆3含假幣;

如果不平衡:

比較堆1和堆3,

如果平衡:

堆2含假幣,

如果不平衡:

堆1含假幣;

余數1:

平均分后得到3堆+1個硬幣,任選兩堆(堆1+堆2)比較,

如果平衡:

比較堆1和堆3,

如果平衡:

剩余的單個硬幣為假,

如果不平衡:

堆3為含假幣的堆

如果不平衡:

比較堆1和堆3,

如果平衡:

堆2含假幣

如果不平衡:

堆1含假幣

余數2:

平均分后得到3堆+1個硬幣,任選兩堆(堆1+堆2)比較,

如果平衡:

比較堆1和堆3

如果平衡:

假幣在兩個單個硬幣中,這兩個硬幣必然是不平衡的,這時從堆中找出任意一枚硬幣,從兩個單個硬幣中拿出硬幣1進行比較

如果平衡

假幣為幣2

如果不平衡

假幣為幣1

如果不平衡:

堆3為含假幣的堆

如果不平衡:

比較堆1和堆3

如果平衡:

堆2含假幣

如果不平衡:

堆1含假幣

分為堆1,堆2,堆3,余數k

如果堆123數目為0

if k=0

if k=1

if k=2

Else

if 堆1和堆2平衡:

if 堆1和堆3平衡,

findOutFake(k)

else

findOutFake(堆3)

else:

if 堆1和堆3平衡,

findOutFake(堆2)

else

findOutFake(堆1)

總結

以上是生活随笔為你收集整理的java 假币问题_减治法解决假币问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。