经典的数学问题,“天平称重问题”——java代码实现,原理及解析

2023-11-15

天平称重原理

首先,我们知道,一个数 N 的二进制表示中最高位的位数加一,就是 N 在二进制下的位数(也就是最高位是第几位)。例如,如果 N=10,那么 N 的二进制表示是 1010,其中最高位是第四位,所以 N 在二进制下的位数为 4。

接下来,我们考虑如何用一个公式来计算 N 在二进制下的位数。我们知道,如果将一个数 N 进行对数运算,对数的底数可以是任意正数。因此,我们可以使用以 2 为底数的对数,即 log2(N),来计算 N 在二进制下的位数。

然而,在 Java 中,Math 类中没有提供以 2 为底数的对数函数。但是,我们可以使用换底公式,将以任意底数 a 的对数转换为以另一个底数 b 的对数。具体地,对于任意正数 N,有以下公式成立:

logb(N) = loga(N) / loga(b) 

其中,loga(N) 表示以底数 a 的对数,loga(b) 表示以底数 a 的 b 的对数。

因此,我们可以将以 2 为底数的对数转换为以自然数 e 为底数的对数,即:

log2(N) = loge(N) / loge(2)

然后,我们可以使用 Java 的 Math 类中的 log 方法,来计算自然数 e 为底数的对数。具体地,(Math.log(N) / Math.log(2)) 表示以 2 为底数的对数,再加上 1,就是 N 在二进制下的位数,即最高位的位数加一。

因此,我们使用 (Math.log(N) / Math.log(2)) + 1 这个公式,来计算 N 在二进制下的位数,也就是最高位的位数加一。

----------------------------------------------------------------------------------------------------------------------------------------

问题描述

        你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意 小于等于 N 的正整数重量。

        那么这套砝码最少需要包含多少个砝码?

        注意砝码可以放在天平两边。
输入格式

        输入包含一个正整数 N。
输出格式

        输出一个整数代表答案。
样例输入

7

样例输出

3

样例说明

33 个砝码重量是 1、4、61、4、6,可以称出 11 至 77的所有重量。

1 = 1;1=1;

2 = 6 − 42=6−4(天平一边放 66,另一边放 44);

3 = 4 − 1;3=4−1;

4 = 4;4=4;

5 = 6 − 1;5=6−1;

6 = 6;6=6;

7 = 1 + 6;7=1+6;

少于 33 个砝码不可能称出 11 至 77​ 的所有重量。
评测用例规模与约定

对于所有评测用例,1 ≤ N ≤ 10000000001≤N≤1000000000。
运行限制

    最大运行时间:1s
    最大运行内存: 512M
核心代码

public static int minimumWeights(int N) {
    int k = (int) (Math.log(N) / Math.log(2)) + 1;
    return k;
}

完整代码

import java.util.Scanner;

public class fama {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个正整数:");
        try {
            long N = scanner.nextLong();
            int k = (int) (Math.log(N) / Math.log(2)) + 1;
            System.out.println("需要的砝码数量为:" + k);
        } catch (Exception e) {
            System.out.println("输入的不是正整数!");
        }
	}
}

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

经典的数学问题,“天平称重问题”——java代码实现,原理及解析 的相关文章

随机推荐

  • Spring注入service为null另类解决办法 工具类 一般类 静态 非controller

    本文转载自 http www cnblogs com allforone p 4108862 html 系统为SpringMVC框架 在开发的过程中有一些工具类需要调用下由spring管理的service层 但是一进注入不进来 报null异
  • 高德地图获取行政区一直报no_data

    代码 let that this this map new AMap Map container zoom 20 级别 center 120 26 30 18 中心点坐标 mapStyle amap styles darkblue 设置地图
  • 【复习笔记】Java基础理论知识,Android小程序开发实例

    lib目录 存放Java的类库文件 src rar文件 构成Java平台核心API的所有类的源文件 5 main 方法 main 方法是Java程序的入口 一个程序只能有一个main 方法 6 转义字符 n 换行 t 制表位 一个制表位等于
  • tshark在流量分析中的绝佳应用(超详细)

    目录 简介 参数 tshark与wireshark对比 基本命令 获取数据包摘要信息 显示时间格式 捕获过滤器 捕获并保存数据包 显示过滤器 区分显示过滤器和读取过滤器 一些好用的显示过滤器 e参数的应用 HTTP中的应用案例 mysql中
  • 在keil开发平台中,常用的Debug菜单命令

    在keil开发平台中 常用的Debug菜单命令如下 start stop debugsession 开始或者停止调试操作 run 一直运行到下一个活动的断点 停止点 如果没有断点 则一直循环运行 step 以行为单位 单步执行代码 step
  • FreeMarker由浅入深之一 FreeMarker简单介绍

    一 什么是FreeMarker FreeMarker是一个用Java语言编写的模板引擎 它基于模板来生成文本输出 所谓模板 就是一份已经写好了基本内容 有着固定格式的文档 其中空出或者用占位符标识的内容 由使用者来填充 不同的使用者给出的数
  • 设置访问权限_一项一项教你测等保2.0——Windows访问控制

    一 前言 随着社会的进步和科技的发展 新技术 新业务下的产品与服务不断创新与升级 云服务 大数据 物联网 移动互联及工业控制等新技术广泛应用 使用多年的等保1 0相关系列标准在适用性 时效性 易用性 可操作性上已经无法满足新时代的要求 并且
  • 注册adobe账号成功访问被拒绝

    安装photoshop2020后需要登录adobe账号 登录adobe账号成功但提示访问被拒绝 出现这种情况建议换个邮箱重新注册 而且国家注意不要选中国
  • XO

    时钟信号是处理器电路开始工作的基本条件之一 在电路中有着非常重要的作用 当智能手机接上电源之后 电源电路两端就会产生3 7V的电压 这个电压直接为处理器内部的振荡器供电 随即时钟电路开始工作 为处理器芯片内部的微处理器电路中的开机模块提供所
  • SpringBoot项目创建报:java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication错误的解决方案

    第一次创建SpringBoot项目结果出现了不少错误 其他错误都通过百度的方式得到解决 唯独这个错误困扰我很久了 而且百度上没有对于这种错误的解决方案 所以给出这种错误的解决方案 虽然明显知道是jar包问题 不管怎么clean怎么的还是没能
  • 数据结构 - 队列 && 环形队列(循环队列)

    文章目录 队列介绍 数组模拟队列设计思路 数组模拟队列代码实现 环形队列相关知识说明 队列长度公式推导 数组模拟环形队列代码实现 队列介绍 队列是一个有序列表 可以用数组或是链表来实现 遵循先入先出的原则 即 先存入队列的数据 要先取出 后
  • yum安装 ssh:Failed to download metadata for repo ‘AppStream‘

    通过yum安装ssh执行命令 yun install openssh openssh server openssh clients 会报错 Failed to download metadata for repo AppStream 各种尝
  • 升压稳压原理

    文章目录 降压稳压 升压稳压 芯片的作用 储能公式 降压稳压 降压稳压原理相对简单 将芯片当成一个 自动可变电阻 即可 这样就可以保证输出为恒定的电压值 不过需要注意的是 这块 自动可变电阻 有极限值 比如对于7805来说 降压差不可少于2
  • 基于mnist数据库的CNN卷积神经网络手写数字识别MATLAB仿真

    目录 一 理论基础 二 核心程序 三 仿真结论 一 理论基础 手写数字识别是计算机视觉领域的一个重要问题 它在很多应用中都有广泛的应用 如自动化识别 自然语言处理 人机交互等 基于MNIST数据库的CNN卷积神经网络手写数字识别是其中一种常
  • 谷歌开源图片压缩算法Guetzli实测体验报告

    作者 王亚军 编辑 宋秉金 王亚军 腾讯工程师 负责OMG无线新闻 腾讯视频图片服务等的业务运维工作 阅读原文 更多技术干货 请访问腾云阁 谷歌大神又出开源新技术啦 这次是对JPEG格式的图片采用全新算法重新编码 输出的图片还是JPEG但是
  • Docker入门笔记

    Docker 技术的三大核心概念 镜像 Image 容器 Container 仓库 Repository 在线练习docker https labs play with docker com URL 工具 curl 的用法指南 https
  • Ant Design Pro 关闭mock数据 改成使用服务器API

    Ant Design Pro中默认是使用了mock数据的 由于在做项目之前没有学习过react dva redux umi这些基础组成知识 对我这个新手来说确实比较辣手 首先修改config目录下config js的proxy属性 将我们的
  • [激光原理与应用-35]:《光电检测技术-2》- 光学测量基础 - 认识光源

    目录 一 对光源的基本要求 二 光源的定义 三 光源的分类 四 产生途径 五 电光效应发光 5 1 发展历史 5 2 发展前景 5 3 主要种类 一 对光源的基本要求 二 光源的定义 光源是一个物理学名词 能发出一定波长范围的电磁波 包括可
  • ffmpeg + x264+ x265 + libde265 + opengl es display

    这是手机直播推送流 https github com wangzuxing MyFFmpegH264H265YUVOpenGL https github com jacke121 MyFFmpegH264H265YUVOpenGL
  • 经典的数学问题,“天平称重问题”——java代码实现,原理及解析

    天平称重原理 首先 我们知道 一个数 N 的二进制表示中最高位的位数加一 就是 N 在二进制下的位数 也就是最高位是第几位 例如 如果 N 10 那么 N 的二进制表示是 1010 其中最高位是第四位 所以 N 在二进制下的位数为 4 接下