• 数学 —— 巧用进制


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

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

    如果有无限个砝码,重量分别是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进制。

  • 相关阅读:
    微信中打开 input file 在安卓设备上没有拍照功能
    vue跳转页面在个别手机返回首页index问题
    高德地图在vue-cli中的引用
    express接受图片
    几种在js中循环数组的方法
    vue 组件小例子 this.$parent
    vue.js与后台{{}}冲突的解决办法
    vue弹出框动画
    jq模仿下拉菜单select
    Java字节数组和16进制字符串的互相转化
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12338378.html
Copyright © 2020-2023  润新知