【python】天平最少砝码设计

2023-11-11

题目

有一架天平,砝码的种类和个数要你来设计。给定一个整数n,则待称重的物品的重量可能是 [1,n] 之间的整数,砝码可以放在左盘也可以放在右盘,要能称出所有 [1,n] 重量的物品,请问如何设计砝码的种类和个数,使得这一套砝码的总个数最少?比如 n=3 时,至少要 2 个砝码才能称出所有重量为 1,2,3 物品。 n 的范围是 n⩽10**18

题目分析

首先拿到这一题时到底该有什么思路呢?
潜意识里可能是想着给一个N,然后我把这个N给爆搜一下,找出所有可能的结果,但是这是不行的 n⩽10**18 数据量太大。
那我换一种思路,就是:

如果我就给你1个砝码,那你最大能够称出来满足[1,n1]的这个n1是多少呢?
如果我就给你2个砝码,那你最大能够称出来满足[1,n2]的这个n2是多少呢?
如果我就给你3个砝码,那你最大能够称出来满足[1,n3]的这个n3是多少呢?

好,接下来我们在草稿纸上算一下:

  1. 只有1个砝码,那我能够称出来的最大连续重量就是1,砝码的重量也是1

  2. 那我们现在在1个砝码的基础上,再增加1个砝码,变成2个砝码,那这增加的砝码的重量应该是多少才合适啊,那我们不知道呀,那就先设为x吧。
    不过我们知道1,x重量的砝码它能够称的最大重量就是x+1呀,那第二大重量就是x呀,第三大重量就是x-1呀。而且我们知道如果只有2个砝码,它能够称重的最大范围是[1,2,3,4],这样就可以得到第三大重量x-1=2,那x=3。第2个砝码的重量是3。
    在这里插入图片描述

  3. 同理如果在两个砝码的基础上,我再增加一个砝码,这个砝码的重量仍然设为x,那就有:
    在这里插入图片描述
    3个砝码的重量依次是1,3,9 。能够表示的最大重量范围是:[1,13]

  4. 这样我们就总结出规律了:
    4个砝码的话应该在1,3,9的基础上增加的砝码重量是:x-(1+3+9)=13+1,x=27
    在这里插入图片描述

  5. 通过上面的分析我们就可以知道,砝码的数量一旦给定,它能够称重的最大的连续重量也就确定了,而此时砝码的数量就是需要的最少的砝码的数量。比如1个砝码能够称重的最大连续重量是1,两个砝码能够称重的最大连续重量是4。所以对于给定重量的n,我们只需要确定这个n是在称重范围中的哪一个间隔中,就可以确定这个n需要的最少砝码数量了。
    在这里插入图片描述

代码

"""
固有思维是给一个N,我把这个N给爆搜一下,找出所有可能的结果,但是这是不行的
我们应该换一种思维,就是:
从一开始连续,
 如果我只给你一个砝码,那你最大能够称出来的重量是多少啊
 如果我只给你2个砝码,那你最大能够称出来的重量又是多少啊
 如果我只给你三个砝码呢
...

"""
"""
新加的砝码的重量按照3**n次方增长可以使连续称重的值达到最大化
能够将称重的最大重量是1+3+9+...+3**n-1,满足等比数列求和公式
"""

"""
依次计算出有1个砝码时能够称重的最大重量,有2个砝码时能够计算出的最大重量,...
如果刚好满足N <= 最大重量 说明此时的砝码数量是最少的砝码数量
"""

N = int(input())
n = 1
while True:
    a1 = 1
    an = 3 ** (n - 1)
    q = 3
    maxWeight = (an * q - a1) / (q - 1)  # 等比数列求和公式
    if N <= maxWeight:
        print(n)
        break
    n += 1

代码2

"""
最小砝码设计,根据贪心原理,我们使用最少的砝码得到最大的连续重量
    砝码数量    能秤的最大重量         砝码类型
    1           1                   1
    2           4                   1 3
    3           11                  1 3 9
    4           40                  1 3 9 27
    ..          ..                  ...
    n           1+3+9+.+3**(n-1)    1 3 9 27..3**(n-1)

等比数列求和公式Sn = a1*(1-q**n)/(1-q)
Sn = (1-3**n)/(1-3)  向上取整
"""
import math
Sn = int(input())
n = math.log(2*Sn+1,3)
print(math.ceil(n))

参考链接
https://zhuanlan.zhihu.com/p/37895166

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python】天平最少砝码设计 的相关文章

  • 无法在我的 Django 项目中使用 Sphinx 生成自动文档

    我正在向我的 Django 项目添加文档 github链接 https github com augustakingfoundation queryjane app 该项目是开源的 使用sphinx 但是当尝试生成python文件的auto
  • AttributeError:'function'对象在pandas中没有属性'bar'

    我有一个 pandas 数据框 它是 pandas 数据框类型 如下所示 type df Out 176 pandas core frame DataFrame 但是 当我尝试在此数据框上使用任何绘图函数 如条形图 时 会出现如下错误 df
  • 如何更改默认的Python版本?

    我已经在我的 Mac 上安装了 Python 3 2 我跑完之后 Applications Python 3 2 Update Shell Profile command 当我输入时 这很令人困惑Python V在终端它说Python 2
  • Python Numpy Reshape错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试重塑 3D numpy 数组时遇到一个奇怪的错误 数组 x 的形状为 6 10 300 我想将其重塑为 6 3000 我正
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 如何检索分配给 Django 中的组的所有权限

    我正在执行一项任务来检索分配给 Django 中的组的一组权限 我可以使用以下代码获取创建的组 但无法使用它来获取分配给它们的权限 from django contrib auth models import Group Permissio
  • 如何在seaborn热图标签中使用科学计数法?

    我正在尝试在 python 中使用seaborn 获取热图 不幸的是 即使数字非常大 它也没有使用科学记数法 我想知道是否有任何简单的方法可以转换为科学记数法或任何其他合理的格式 这是显示问题的一段代码 import seaborn as
  • 绝对导入不起作用,但相对导入起作用

    这是我的应用程序结构 foodo setup py foodo init py foodo py models py foodo foodo foodo py从导入类models py module from foodo models im
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • 当我从本地计算机更改为虚拟主机时,从 python 脚本调用 pdftotext 不起作用

    我编写了一个小的 python 脚本来解析 提取 PDF 中的信息 我在本地机器上测试了它 我有 python 2 6 2 和 pdftotext 版本 0 12 4 我正在尝试在我的虚拟主机服务器 dreamhost 上运行它 它有 py
  • 如果另一列中的值为空,则删除重复项 - Pandas

    我拥有的 df Name Vehicle Dave Car Mark Bike Steve Car Dave Steve 我想从 名称 列中删除重复项 但前提是 车辆 列中的相应值为空 我知道我可以使用 df dropduplicates
  • Python sys.modules 包含尚未导入的模块

    我试图了解加载的模块与导入的模块之间的区别 如果有的话 我正在使用 Python 2 7 3 并且只是从命令行运行 Python 如果我执行 import sys sys modules 我得到一个列表 其中包括os 例如 文档说sys m
  • 如何将 Pyspark Dataframe 标题设置到另一行?

    我有一个如下所示的数据框 col1 col2 col3 id name val 1 a01 X 2 a02 Y 我需要从中创建一个新的数据框 使用 row 1 作为新的列标题并忽略或删除 col1 col2 等行 新表应如下所示 id na
  • Jupyter笔记本突然变得很慢

    我以前在anaconda环境下运行jupyter运行得很好 显示警告后 IOPub data rate exceeded The notebook server will temporarily stop sending output to
  • 我可以在 if 语句中使用“as”机制吗

    是否可以使用as in if类似的声明with我们使用的 例如 with open tmp foo r as ofile do something with ofile 这是我的代码 def my list rtrn lst True if
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • Python matplotlib:将轴标签/图例从粗体更改为常规粗细

    我正在尝试制作一些出版质量的图 但遇到了一个小问题 默认情况下 matplotlib 轴标签和图例条目的权重似乎比轴刻度线重 是否有办法强制轴标签 图例条目与刻度线的重量相同 import matplotlib pyplot as plt
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 避免“散点/点/蜂群”图中的数据点重叠

    使用绘制点图时matplotlib 我想偏移重叠的数据点以使它们全部可见 例如 如果我有 CategoryA 0 0 3 0 5 CategoryB 5 10 5 5 10 我想要每一个CategoryA 0 数据点并排设置 而不是彼此重叠

随机推荐

  • cmd更换主题配色

    cmd更换主题配色 去github下载colortool 地址 使用管理员打开cmd进入解压后的文件夹 执行命令 colortool exe b solarized light itermcolors 其他可选方案在schemes下 更换效
  • java反射基础巩固

    反射机制是在运行状态中 对于任意一个类 都能够知道这个类的所有属性和方法 对于任意一个对象 都能够调用它的任意一个方法和属性 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 一直以来反射技术都是Java中的闪亮点
  • 反射和多线程基础

    一 今日内容 1 1 课程回顾 1 2 反射是啥 1 3 进程和线程 1 4 线程的创建方式 1 5 线程的状态 1 6 线程的常用方法 二 课程回顾 Java的基本语法 1 数据类型 基本 引用 2 运算符 算术 逻辑 比较 赋值 位 三
  • 掌握的几种禁止转换八进制,十进制,十六进制

    1 十进制 除表示正负的符号外 以1 9开头 由0 9组成 如 128 234 278 2 八进制 以0开头 由0 7组成的数 如 0126 050000 3 十六进制 以0X或0x开头 由0 9 A F或a f 组成 如 0x12A 0x
  • 实训周笔记

    主机信息收集技术 基础知识 主要收集目标主机的相关信息 主要包括端口 服务 漏洞等信息 信息收集手段多样 可借助工具也多种多样 端口扫描 Nmap 主机信息收集技术 Nmap namp 192 168 1 1 namp A T4 v 192
  • proteus 问题--解决创建项目、打开项目:Error opening VSM Studio project STM32F401VE,无法查看Source Code,无法创建硬件项目

    问题描述 原因 安装软件的路径有中文 删掉所有东西后 重新下载即可 创建新项目 点击New Project 选择GCC for ARM这个配置项 也可以进入后在配置
  • qt如何触发点击事件_PyQt5事件处理机制(一)

    基于窗体的应用程序都是事件 event 驱动的 鼠标单击 按下某个按键 重绘某个组件 最小化窗口都会产生相应的事件 应用程序对这些事件作出相应的处理以实现程序的功能 常用的特定事件处理函数及方法示例代码 from PyQt5 Qt impo
  • 解读 Q_D, Q_Q 指针

    见 qglog h文件定义 define Q D Class Class Private const d d func define Q Q Class Class const q q func d指针是在主类中使用的 来获取私有子类成员指
  • STM32HAL库软件模拟SPI驱动0.96OLED屏幕,F1、F4系列通用,6pin和7pin模块通用

    本实验通过网上搜集的资料 整理出HAL库的SPI驱动 为了方便移植 选择采用软件模拟SPI通信来驱动OLED 本实验使用的OLED为7pin 默认通信模式为SPI 可以更改板上电阻更换为IIC模式 屏幕驱动芯片为SSD1306 模块简介 6
  • 代码流星雨

    什么是html html就是前端可以理解成为网页界面 不会但是想玩 可以在电脑桌面上建一个记事本然后把代码复制后粘贴在记事本里面 然后保存最后吧记事本 新建文本文档 tx 的后缀 就是重命名 改成html 新建文本文档 html 来自htm
  • 阀门与压力表同步代码

    using System Collections using System Collections Generic using UnityEngine public class Mmmmmm MonoBehaviour float sum
  • Elasticsearch 写入和查询优化底层原理

    一 Elasticsearch 写入原理 1 每个index 是由多个shard组成 默认是5个 每个shard有一个主节点和多个副本节点 分散在不同的物理节点上 2 写入数据的时候 先根据routing参数 以那个字段的值作为路由key
  • 入门级题解:704. 二分查找

    题目 给定一个 n 个元素有序的 升序 整型数组 nums 和一个目标值 target 写一个函数搜索 nums 中的 target 如果目标值存在返回下标 否则返回 1 暴力查找 直接找 遍历 直接尝试二分查找 递归应该要用 中间的值 a
  • 1_simulink简单入门_simulink仿真PID控制

    1 simulink简单入门 simulink仿真PID控制 2 simulink搭建RCL 电阻电感电容模块 毕业前想去做物联网还是或者linux 结果玩了一年多的电机控制 早就深知matlab simulink绕不过的 拖到现在 下班晚
  • attention机制(SE-Net、CBAM及Triplet)

    简介 注意力机制 Attention Mechanism 源于人类视觉的研究 在认知科学中 人类会选择性地关注所有信息的一部分 而忽略其他可见信息 为了合理利用有限的资源 就需要选择视觉区域的特定部分 并重点关注它 在神经网络中 atten
  • RabbitMQ 几种模式

    普通模式 一个生产者 一个交换机 一个队列 一个消费者 生产者 public class Send private final static String QUEUE NAME hello public static void main S
  • “csproj文件究竟是做什么用的”

    csproj文件大家应该不会陌生 那就是C 项目文件的扩展名 它是 C Sharp Project 的缩写 那么它究竟是给谁用的呢 那是给开发工具用的 例如我们在熟悉不过的Visual Studio 以及大家可以没有接触过 但是应该都听说过
  • adobe 软件(PS AI)占用内存过大问题

    adobe 软件 PS AI 占用内存过大问题 电脑是通过数据的交换来进行工作 CPU是处理数据交换的硬件 内存是暂时存储这些数据的硬件 电脑内存 RAM 容量越大你的数据交换能力就越强 就越能够完成复杂的任务 查看设备配置 操作系统 内存
  • 毕业设计-基于机器视觉的木材表面缺陷检测-OpenCV

    目录 前言 课题背景和意义 实现技术思路 一 表面缺陷分析及检测方案设计 二 表面缺陷图像识别 三 系统识别性能测试 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业
  • 【python】天平最少砝码设计

    题目 有一架天平 砝码的种类和个数要你来设计 给定一个整数n 则待称重的物品的重量可能是 1 n 之间的整数 砝码可以放在左盘也可以放在右盘 要能称出所有 1 n 重量的物品 请问如何设计砝码的种类和个数 使得这一套砝码的总个数最少 比如