数学 —— 巧用进制

例题 天平称重:变种三进制

用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。

如果有无限个砝码,重量分别是1,3,9,27,81,……等3的指数幂,
神奇之处在于用它们可以称出任意整数重量(砝码允许放在左右两个盘中)。

本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
用户输入:

5

程序输出:

9-3-1

用户输入:

19

程序输出:

27-9+1

要求程序输出的组合总是大数在前小数在后。

可以假设用户的输入的数字符合范围1~121。

思路

1, 3, 9, 27, 81,……
30,31,32,33,34,……
联想到用3进制解决问题。

假设是二进制:
1,2,4,8,……
假设要称重量为10的物品,10转换为二进制是1010,代表取2和8两个砝码就能称出10,11转换为二进制是1011,代表取1、2和8三个砝码就能称出11,……

如果把5转换为3进制为12,1代表要取一个重量为3的砝码,2代表要取两个重量为1的砝码,但是题目中并没有说可以用多个砝码。

如果把5转换为变种3进制可以表示为(2,-1)3=(1,-1,-1)3,这样就能够表示为题目中给出的9-3-1。

二进制代表了两种状态,取或不取,但是三进制代表了三种状态,放在左盘、不取、放在右盘。

对于要称重的数,先转换为3进制 ,然后翻转(放置越界),之后转成字符数组,扫描;如果遇到2就将其自己变成-1,下一位+1;如果遇到22的情况就将2变成-1,下一位变成0,后面一位+1;最后,恢复成10进制。

posted @ 2019-04-30 22:26  AlexKing007  阅读(186)  评论(0编辑  收藏  举报