用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。如果有无限个砝码,但它们的重量分别是1,3,9,27,81,……等3的指数幂神奇之处在于用它们的组合可以称出任意整数重量(砝码允许放在左右两个盘中)。本题目要求编程实现:对用户给定的重量,给出砝码组合方案,重量<1000000。例如:用户输入:5程序输出:9-3-1用户输入:19程序输出:27-9+1

本人不是科班生。同时,也是接触python不久的newer,对数据结构和算法的操作也是刚刚入门。就自己学了一点点的算法和DS。但是本人发现网上的大部分试题关于python的题解并不多。一个小时前在CSDN上找了一圈都没有找到本题的python版本的题解。无奈,只有反复看视频自己敲代码了。

代码主要分为三个部分:

1,三进制的数值转换;

2,三进制数的处理;

3,三进制数的表达式转换。

这三个部分单拿出来都不难,但是想到把这三个基本操作组合起来有一些难度。个人觉得放到leetcode上面可以当medium的题了。

代码如下,亲测有效。如有意见,欢迎留言交流,共同进步。

n = eval(input('请输入目标数字:'))def toTernary(n):  # 转成三进制,返回三进制数组:从低位到高位。ans = []while n > 0:ans.append(n % 3)n //= 3return ansdef toExp(ter):  # ter是从低位到高位ans = []l = len(ter)for i in range(l):exp = ''if ter[i] > 0:if i != l - 1:exp = '+'num = pow(3, i)exp += str(num)ans.append(exp)elif ter[i] < 0:if i != l - 1:exp = '-'num = pow(3, i)exp += str(num)ans.append(exp)else:continueans = ans[::-1]return ''.join(ans)num = toTernary(n)  # 得到的是从低位到高位
res = []  # 存放处理后的结果三进制数组,从低位到高位
l = len(num)
for i in range(l):if num[i] == 2:  # 当前位是2res.append(-1)if i == l - 1:  # 这是最后一位res.append(1)else:  # 这不是最后一位num[i + 1] += 1elif num[i] == 3:  # 当前位是3res.append(0)if i == l - 1:  # 这是最后一位res.append(0, 1)else:  # 这不是最后一位num[i + 1] += 1else:  # 当前位是0或1res.append(num[i])
exp = toExp(res)
print(exp)
#######亲测实例######
请输入目标数字:19
27-9+1

蓝桥杯数学题:天平称重:巧用三进制。基于python3.9的原创代码相关推荐

  1. 小单刷题笔记之天平称重 (巧用进制)

    题目: 用天平称重时,我们希望尽可能少的砝码组合称出尽可能多的重量,如果有无限个砝码,但它们的重量是1,3,9,27..等三的指数幂,神奇的是用它们组合可以称出任意的重量.本题要求实现,用户给出重量, ...

  2. 天平称重【递归解法】

    用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 如果只有5个砝码,重量分别是1,3,9,27,81 则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中). 本题目要 ...

  3. 蓝桥杯单片机 | 特训案例【进阶06】基于PCF8591的DAC模拟电压输出

    [1]题目要求 新建工程,以I/O模式编写代码,在CT107D单片机综合训练平台上,实现以下功能: 1.将IIC总线的底层驱动代码文件正确移植到工程中. 2.将J5配置BTN模式,把S4设置为独立按键 ...

  4. Google面试题原理解析 12个乒乓球其中有1个次品,用天平称重3次找出

    1. 题目 "在12个小球里有一个次品,重量与其他11个球不同.用一个没有砝码的天平,称3次,保证找到那个次品,并且区分出次品是轻还是重呢?" 这个问题看似简单,做起来还真不容易. ...

  5. 经典算法之天平称重问题(进制解法)

    问题描述: 已知所有砝码重量均为3的倍数,且所有重量的砝码有且只有一个 要求输出重量1到n的所有物品的称重方式 解题思路: 用字符串拼接结果 三进制的返回值为0 1 2 返回值为0则表示该权重不取 返 ...

  6. 蓝桥杯2020答案c语言b组,2020十月份蓝桥杯B组省赛题解大全(害!附题面文件和部分代码~)...

    A:门牌制作 签到题,答案是624 624624 B:既约分数 这个没什么好说的,两重循环枚举分子分母 计算g c d gcdgcd即可 答案:2481215 C:蛇形填数 代码就是硬模拟,一次往左下 ...

  7. 2017年第八届蓝桥杯国赛B组试题A-36进制-进制转换

    [问题描述] 对于16进制,我们使用字母A-F来表示10及以上的数字. 如法炮制,一直用到字母Z,就可以表示36进制. 36进制中,A表示10,Z表示35,AA表示370 你能算出 MANY 表示的数 ...

  8. 第十四届蓝桥杯大赛软件赛省赛-试题 B---01 串的熵 解题思路+完整代码

    欢迎访问个人网站来查看此文章:http://www.ghost-him.com/posts/db23c395/ 问题描述 对于一个长度为 n 的 01 串 S = x 1 x 2 x 3 . . . ...

  9. [蓝桥杯]测试题 E 算法提高 我们的征途是星辰大海 题解和C++示例代码

    E 算法提高 我们的征途是星辰大海 时间限制:1.0s   内存限制:256.0MB 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成. 共有四种方格: '.' 代表 ...

最新文章

  1. 华为面试题——一道关于指针方面的编程题(C/C++)
  2. 从命令式到响应式(四)
  3. C# 3.0入门系列(三)
  4. python常用函数使用方法实例
  5. 【分布式】分布式架构-ESB SOA
  6. ios 设备获取idfa_iOS获取设备ID总结
  7. SAP License:ERP系统供应商管理都包含什么?
  8. AMOS结构方程模型(SEM)简介【SPSS 049期】
  9. 写一个用矩形法求定积分的通用函数,分别求sinx,cosx,expx从0到1的定积分(指针方法处理)——C语言
  10. 如何使用手机通过校园无线网在知网免费下载论文
  11. t3软件怎么生成报表_t3财务报表怎么生成
  12. [CodeForces 332B]Maximum Absurdity[DP]
  13. Skia API的简单应用
  14. [Swift]LeetCode976. 三角形的最大周长 | Largest Perimeter Triangle
  15. 美国计算机本科排名jjl,美国本科计算机专业排名(中)
  16. CentOS6.x设置邮件短信报警
  17. GIF 89a图像格式解析
  18. Kali aircrack-ng 暴破wifi
  19. UE-PlayerState
  20. 细数十七种黑客攻击手段,简直防不胜防!

热门文章

  1. GPS_华翰_解决方案
  2. H3C模拟器DHCP两台路由器配置实验详细步骤
  3. 【Python 多线程vs协程】爬取西游记
  4. Perl中use和require用法对比
  5. php require的用法,PHP 中 require 的用法
  6. java下标越界的三种处理方式,数组下标越界,该怎么解决
  7. ComponentOne Studio 企业版,.NET UI 控件的完整集合
  8. 信息化时代下的我们----弄潮儿
  9. 服务器系统如何校验md5值,怎么验证md5-NTP的MD5加密
  10. 第十一天堂的学习笔记Ubuntu第一篇,分区安装,设置root密码,安装五笔和VMtools