我們用一個等臂天平來稱物體的質量,如果我們要稱的物體質量範圍在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;
}