三进制与一道经典的砝码问题

有4个砝码a,b,c,d重量分别是1,3,9,27,问这几个砝码可以称重多少种可能的重量?


若把放左边设为-1,不放设为0,放右边设为1,则每个砝码都有3种放法,所有总共有3^4=81中放法,穷举法是把这81中放法的值都求出来,再取绝对值,去掉重复的,看下有多少个数,这个数量就是我们可以称重的可能数了。


然而观察发现a,b,c,d是个3的等比数列,那么我们就可以把这个问题对应到一个三进制的问题。设有一个三进制数S,有4位s4 s3 s2 s1,每位的取值范围都是{0,1,2},那么S的十进制值应该是s4*27+s3*9+s2*3+s1*1,S最大是2*27+2*9+2*3+2*1=80,也即是3^4-1,4位数的能表示的最大值的后继应该是五位数的最小值也就是27*3。取值范围是从0到80,之间的数肯定都能取到,而且也不重复,这是三进制数的规则决定的。


也就是说对于1,3,9,27,如果每个位都能取0,1,2中一个,那么能表示的数的范围是0到80,这81个数。

现在问题是每个位取的范围是-1,0,1,那么能表示的数的范围是多少呢?我们可以做一个一一映射-1映射到0,0映射到1,1映射到2。也就是都减1。那么,对任意一个数s,1对应位的贡献将会减1,3对应位的贡献将会减3,9所对应的位的贡献会减少9,27所对应的位贡献会减少27。合记,每个数s会比原来减少(1+3+9+27)=40。也就是说范围变成(0-40)到(80-40)了,即-40到40。绝对值就是0到40。


最后:砝码问题稍稍扩大一些:要想在天平上称出1500磅在内的任何整磅数,问最少需要几个多重的砝码?


解:500*2=1000,3^6=729,3^7=2187,所以只要1,3,9,27,81,243,729这些能表示的三进制数是0到2186,每位只能取-1,0,1的话,表示范围变成

0-(1+3+9+27+81+243+729)到2186-(1+3+9+27+81+243+729),即-1093到1093。同理可算出1,3,9,27,81,243能表示的整数范围是-364到364。不满足要求,所最少需要1,3,9,27,81,243,729这些砝码就可以摆出0到1093之间的任何整数,当然也包括1到500了


其实问题就是要几位的三进制数的表示范围的问题,只要考虑最大值,和最小值,中间的值肯定能取到,这是进制数的规律吧




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlingh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值