天平秤重问题(三进制)
[問(wèn)題描述]:
?有一只天平和N只砝碼,如何設(shè)計(jì)這N只砝碼,才能使這天平能夠連續(xù)秤出的重量最大?假設(shè)砝碼的最小單位為1克,秤物時(shí)物品放在天平的左邊,砝碼可以放在右邊也可以放在左邊,不管放在哪一邊只要天平能夠平衡就行,物品的重量應(yīng)是右邊砝碼總重量減去左邊砝碼的重量。
輸入一個(gè)物品的重量,輸出其秤重方案。
?[分析與算法選擇]:
?這個(gè)問(wèn)題是從一個(gè)經(jīng)典的數(shù)學(xué)問(wèn)題變化而來(lái),這個(gè)數(shù)學(xué)問(wèn)題的大意是:一個(gè)物體重40磅,掉在地上后摔成四片,這四片恰好能夠作為砝碼連續(xù)秤出40磅以內(nèi)的物品的重量,這四片的重量如何?
?(1)如何設(shè)計(jì)砝碼?
?我們先不去看單位,直接用數(shù)字來(lái)描述。因?yàn)橐苓B續(xù)秤出一范圍內(nèi)的值,所以首先要有1,從數(shù)學(xué)上可以知道,N只砝碼本身最大能秤的總重就是這N只砝碼的重量和,下面就看如何保證連續(xù)的數(shù)都能秤出了。設(shè)這N只砝碼的重量分別為W1、W2……Wn,且有W1<=W2<=……<=Wn, W1=1,下面看W2如何設(shè)計(jì)。
?如果W2=1,1、2都能秤出;如果W2=2,1、2、3都能秤出;如果W2=3,1可以秤出(W1)、2可以秤出(W2-W1)、3可以秤出(W2)、4也可以秤出(W1+W2);如果W2=4,則2不能秤出;所以W2最大為3(=3*W1)。
?同理可推出W3最大為9(=3*W2);
?……
?Wn最大為3n-1(=3*Wn-1)。
?設(shè)計(jì)方案為這N只砝碼重分別為:1、3、9、27、……、3^n-1。
?(2)如何根據(jù)物品重量得到秤重方案?
??? 物品(+砝碼)???????? 砝碼
因?yàn)槲锲饭潭ǚ旁谝贿B(如左邊),只要考慮砝碼放的情況。任一個(gè)砝碼都可能有三種狀態(tài):一是跟被秤物品放在一起(如左邊),二是不放,三是放在物品另一邊(如右邊)。最后物品的重量等于所有砝碼乘上相應(yīng)系數(shù)的和。這個(gè)系數(shù)可能是:-1、0、1。
先來(lái)看3只砝碼時(shí)各種重量的稱法,如下表所示,其中-1表示砝碼放在物品一邊、0表示砝碼不放進(jìn)天平、1表示砝碼放在物品另一邊,如果每一位加1后便只會(huì)是0、1、2這3個(gè)數(shù)字中的一個(gè),所以可以方便地跟三進(jìn)制數(shù)對(duì)應(yīng)起來(lái):
| 物品重量 | 3只砝碼 | 每一位加1 | |||
| 9 | 3 | 1 | 三進(jìn)制數(shù) | 十進(jìn)制數(shù) | |
| 1 | 0 | 0 | 1 | 112 | 14(=1+13) |
| 2 | 0 | 1 | -1 | 120 | 15(=2+13) |
| 3 | 0 | 1 | 0 | 121 | 16(=3+13) |
| 4 | 0 | 1 | 1 | 122 | 17(=4+13) |
| 5 | 1 | -1 | -1 | 200 | 18(=5+13) |
| 6 | 1 | -1 | 0 | 201 | 19(=6+13) |
| 7 | 1 | -1 | 1 | 202 | 20(=7+13) |
| 8 | 1 | 0 | -1 | 210 | 21(=8+13) |
| 9 | 1 | 0 | 0 | 211 | 22(=9+13) |
| 10 | 1 | 0 | 1 | 212 | 23(=10+13) |
| 11 | 1 | 1 | -1 | 220 | 24(=11+13) |
| 12 | 1 | 1 | 0 | 221 | 25(=12+13) |
| 13 | 1 | 1 | 1 | 222 | 26(=13+13) |
由上表我們可以總結(jié)出這樣的計(jì)算方法:對(duì)于給定的物品重量,先確定它最多用到多大的砝碼,假定是3n-1,那么先將這個(gè)物品的重量加上1、3、……3n-1,得到一個(gè)數(shù),再對(duì)這個(gè)數(shù)進(jìn)行除3取余運(yùn)算,當(dāng)余數(shù)為0時(shí)表示相應(yīng)的砝碼跟物品放在一起,余數(shù)為1時(shí)表示相應(yīng)的砝碼不放,為2時(shí)表示放在物品的另一邊。
?
總結(jié)
以上是生活随笔為你收集整理的天平秤重问题(三进制)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 背包问题扩展
- 下一篇: 最短路径Dijkstra(静态邻接表+优