(轉)我們用一個等臂天平來稱物體的質量,如果我們要稱的物體質量範圍在1到40克(整數),請問我們最少需要幾塊砝碼可以完成這項物體質量的稱量?

我們用一個等臂天平來稱物體的質量,如果我們要稱的物體質量範圍在1到40克(整數),請問我們最少需要幾塊砝碼可以完成這項物體質量的稱量?

A: 3
B: 4
C: 5
D: 6
E: 7

答案:B 4塊

思路一:

從1開始:缺少1,+1(需要重量爲1的砝碼)
2:缺2,但是前面最大可能滿足的元素爲1,所以下個砝碼可以爲3(3-1=2)
3:
4:
5:缺5,而前面的砝碼可以最大表示4,所以爲了滿足5,下個砝碼可以爲4+5=9(儘可能稀疏)
OK,現在我們前兩個砝碼可以表示範圍爲1-4;所以《9-4,9+4》的範圍統統可以表示,也即《5,13》都可以表示了。
14:缺少14,前面砝碼最大可以表示爲13,所以爲了滿足14的要求,下個砝碼應該爲13+14=27,如此,前面3個砝碼的最大範圍爲1-13,故而,《27-13,27+13》的範圍便統統可以表示了【14,40】
於是最少需要4個砝碼

思路二:

此題可以看成用多少個數可以表示1-40之間任何一個數。砝碼有三種狀態,放在物體同側,放在物體另一側,並不使用。 所以這些數之間可以加可以減,也可以不計算在內。考慮用對稱三進制來計算,即,-1,0,1三個狀態。40可以用1111來表示,所以最多隻用四個砝碼就可以表示1-40之間所有數。

擴展:如何實現稱出1∼n 克的物品,請問最少需要幾顆砝碼?

#include <iostream>
using namespace std;
int main(){
    long long T,n;
    cin>>T;
    {
        while(cin>>n){
            long long ans = 0;
            long long t = 1 , sum = 0;
            while(sum<n){
                ans++;
                sum+=t;
                t*=3;
            }
            cout<<ans<<endl;
        }
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章