当前位置: 首页 > news >正文

摔杯算法(要求用最少的测试次数找出恰巧会使杯子破碎的楼层。)

题目: 一种杯子,若在第N层被摔破,则在任何比N高的楼层均会破;若在第M层不破,则在任何比M低的楼层均不会破。给你两个这样的杯子,让你在100层高的楼层中测试,要求用最少的测试次数找出恰巧会使杯子破碎的楼层。

解题思路:

1个杯子尝试的次数假设为n, 则可能尝试有1次, 2次, 3次,...,n次, 但,要求最少的测试次数(楼层不可能重复), 所以尝试总数还应该是这次大于等于100, 上次计算得出的尝试总数小于100

即1+2+3+...+n >= 100

简化公式: 1/2n(n+1) >= 100

求得n的最小整数为14

function bei({n}) {let currentNum = 0if(n == 1) return {n:1}if(n > 1 && n <= 100) {const obj = bei({n: n - 1})if(typeof obj === 'object') {const pre = obj.n; // 上次尝试总数currentNum = n + pre // 此次尝试总数if(currentNum >= 100 && pre < 100) {console.log(n, pre, currentNum)// 14 91 105print(n)return}return {n:currentNum, parts: n}}}
}function print(minNum) {console.log(minNum) // 14
}bei({n:100})

优化: 除了最小值, 其他可能的区间:

var arr = []
function bei2({ n, step }) {let currentNum = 0const end = n + step - 1if (end) {arr.push([n, end])if (n >= 100) {return}const start = endconst end2 = start + step - 1if (start > end2) returnreturn end + 1 >= 100 ? arr.push([100]) : bei2({ n: end + 1, step: step - 1 })}// 计算第一个最小测试区间, 后面的区间数字间隔逐渐变小while (n >= 1 && n <= 100) {currentNum += n // 此次尝试总数if (currentNum >= 100) {arr.push([1, n])print(n)return bei2({ n: n + 1, step: n - 1 })}n++}
}
bei2({ n: 1 })
console.log(arr)// 一种杯子,若在第N层被摔破,则在任何比N高的楼层均会破,若在第M层不破,则在任何比M低的楼层均会破,给你两个这样的杯子,让你在100层高的楼层中测试,要求用最少的测试次数找出恰巧会使杯子破碎的楼层。
// 第一个杯子可能的投掷楼层分别为:14,27,39,50,60,69,77,84,90,95,99,100
// 14 + 13 => 27
// 27 + 12 = 39
// 39 + 11 => 50
// 50 + 10 => 60
// 60 + 9 => 69
// 69 + 8 => 77
// 77 + 7 => 84
// 84 + 6 => 90
// 90 + 5 => 95
// 95 + 4 => 99
// 最大100

当我们用14时,我们可以得出范围为1~14,  15~27,  28~39... 96~99, 100

参考地址: 100层楼两个杯子找杯子碎的临界点-CSDN博客

相关文章:

摔杯算法(要求用最少的测试次数找出恰巧会使杯子破碎的楼层。)

题目: 一种杯子&#xff0c;若在第N层被摔破&#xff0c;则在任何比N高的楼层均会破&#xff1b;若在第M层不破&#xff0c;则在任何比M低的楼层均不会破。给你两个这样的杯子&#xff0c;让你在100层高的楼层中测试&#xff0c;要求用最少的测试次数找出恰巧会使杯子破碎的楼层…...

centos7安装docker容器

卸载老版本&#xff1a; $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine/var/lib/docker/路径下存在镜像、数据卷、容器等&#xff0c;在卸载的时候是不会自动删除…...

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例 前言一、案例准备二、自动生成随机二叉树工具类&#xff08;TreegenerateUtils&#xff09;三、如何调用随机二叉树工具类&#xff08;TreegenerateUtils&#xff09;&#xff1f; 前言 今天笔者在测试有关二叉树的…...

防火防盗防小人 使用 Jasypt 库来加密配置文件

⚔️ 项目配置信息存放在哪&#xff1f; 在日常开发工作中&#xff0c;我们经常需要使用到各种敏感配置&#xff0c;如数据库密码、各厂商的 SecretId、SecretKey 等敏感信息。 通常情况下&#xff0c;我们会将这些敏感信息明文放到配置文件中&#xff0c;或者放到配置中心中。…...

Spring Cloud学习(二)【Eureka注册中心】

文章目录 Eureka 注册中心Eureka 的作用 动手实践搭建 EurekaServer服务注册服务发现 Ribbon 负载均衡负载均衡原理IRule 接口&#xff08;负载均衡策略&#xff09;饥饿加载 Eureka 注册中心 服务调用出现的问题 不能采用硬编码服务消费者该如何获取服务提供者的地址信息&am…...

数据分析实战 | 线性回归——女性身高与体重数据分析

目录 一、数据集及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型预测 实现回归分析类算法的Python第三方工具包比较常用的有statsmodels、statistics、scikit-learn等&#…...

python回文日期 并输出下一个ABABBABA型回文日期

题目&#xff1a; 输入&#xff1a; 输入包含一个八位整数N&#xff0c;表示日期 对于所有的测评用例&#xff0c;10000101 ≤N≤89991231&#xff0c;保证N是一个合法日期的8位数表示 输出&#xff1a; 输出两行&#xff0c;每行一个八位数。第一行表示下一个回文日期第二…...

Zotero拓展功能之Zotero Style

Zotero Style拓展功能 一、列&#xff1a; 1.简介 首先你必须知道Zotero的基本功能&#xff1a;右键任意一个列的名字&#xff0c;会弹出一个右键菜单&#xff0c;你可以勾选/取消勾选一个列&#xff0c;并且在最后有两个按钮&#xff0c;一个是“列设置”&#xff0c;一个是…...

小程序提交表单之后,清除表单form

构造表单 <form bindsubmit"bindFormSubmit"> <view class"main"><textarea name"textarea" value"{{content}}"></textarea> <button form-type"submit" type"primary" > 提交 &…...

Java程序设计实验5 | Java API应用

*本文是博主对Java各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 &#xff08;解…...

自媒体项目详述

总体框架 本项目主要着手于获取最新最热新闻资讯&#xff0c;以微服务构架为技术基础搭建校内仅供学生教师使用的校园新媒体app。以文章为主线的核心业务主要分为如下子模块。自媒体模块实现用户创建功能、文章发布功能、素材管理功能。app端用户模块实现文章搜索、文章点赞、…...

客服呼叫中心的语音质检工作

语音质检是呼叫中心运营中必不可缺少的一个环节&#xff0c;呼叫中心语音质检对坐席起着直接监督的作用&#xff0c;也正是这种监督约束推动着客服人员不断提升自身的业务能力。 而客服呼叫中心的质检结果中还蕴藏了大量有价值的信息&#xff0c;可以通过日常的质检工作真正发现…...

深度解密 | 灵脉SAST 3.0最新特性曝光

一、多模智能引擎焕新 2023年6月&#xff0c;灵脉SAST入选国际权威咨询机构Forrester发布的《The Static Application Security Testing Landscape》报告成为全球范围内仅有的两款亚太区SAST代表产品之一。 此次3.0版本重大焕新&#xff0c;灵脉SAST从检测工具的灵魂核心入手…...

NowCode JZ39 数组中出现次数超过一半的数字 简单

题目 - 点击直达 1. JZ39 数组中出现次数超过一半的数字 简单1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. JZ39 数组中出现次数超过一半的数字 简单 1. 题目详情 1. 原题链接 NowCode JZ39 数组中出现次数超过一半的数…...

【SA8295P 源码分析 (一)】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数

【SA8295P 源码分析】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数 一、配置 TLMM GPIO15 中断示例代码二、配置 PMIC2 GPIO1 中断示例代码三、easy_irq 实现源码分析3.1 struct _easy_irq_ctx 结构体内容分析3.2 register_easy_irq_callbac…...

电大搜题:开启智能学习新时代

尊敬的读者朋友们&#xff0c;今天我将向您介绍一款能够让您轻松搜题、高效学习的神奇工具&#xff1a;电大搜题&#xff01;作为湖北开放大学和广播电视大学的学习者&#xff0c;您一定对于繁重的课业和复杂的试题感到头疼。但是&#xff0c;现在有了电大搜题微信公众号&#…...

19、Flink 的Table API 和 SQL 中的自定义函数及示例(4)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

Vue23-props配置功能

Vue2&3-props配置功能 Vue2-props配置 功能&#xff1a;接收从其他组件传过来的数据&#xff0c;将数据从静态转为动态注意&#xff1a; 同一层组件不能使用props&#xff0c;必须是父组件传子组件的形式。父组件传数据&#xff0c;子组件接收数据。不能什么数据都接收&a…...

怎样使用ovsyunlive在web网页上直接播放rtsp/rtmp视频

业务中需要在网页中直接播放rtsp和rtmp视频&#xff0c;多方比较测试发现ovsyunlive的播放器能直接播放rtsp/rtmp视频&#xff0c;还是非常方便简洁&#xff0c;使用过程如下&#xff1a; 1&#xff0c;Windows系统在github上面下载ovsyunlive绿色包下载解压。 github地址&am…...

MySQL | 查询接口性能调优、编码方式不一致导致索引失效

背景 最近业务反馈&#xff0c;列表查询速度过慢&#xff0c;需要优化。 到正式环境系统去验证&#xff0c;发现没筛选任何条件的情况下&#xff0c;查询需要三十多秒&#xff0c;而筛选了条件之后需要13秒。急需优化。 先说结论&#xff1a;连表用的字段编码方式不一致导致索…...

保姆级教程:手把手教你用C++实现格雷码+相移的三维重建(附完整代码与补码处理)

从零实现结构光三维重建&#xff1a;格雷码与相移的C实战指南 开篇&#xff1a;为什么选择格雷码相移方案&#xff1f; 在工业检测、逆向工程和医疗成像领域&#xff0c;结构光三维重建技术因其非接触、高精度的特性成为首选方案。而格雷码结合相移的方法&#xff0c;尤其适合需…...

告别硬编码!用Qt Linguist和qsTr优雅管理你的Qml应用多语言文案

工程化多语言管理&#xff1a;用Qt Linguist构建可维护的Qml应用 当你的Qml应用从demo阶段走向产品化时&#xff0c;那些散落在各个文件中的文本字符串会逐渐成为维护的噩梦。想象一下这样的场景&#xff1a;产品经理突然要求为法语用户添加支持&#xff0c;而你需要在几十个Qm…...

Educational Codeforces Round 120 (Rated for Div. 2) vp补题

文章目录C 贪心 策略D 组合数学 容斥原理E 状压 绝对值 贪心参考Ander 的题解 C 贪心 策略 基本策略&#xff1a;操作1改小的&#xff0c;让大的数进行操作2变成小的 void solve(){int n,k;cin>>n>>k;vector<int>a(n1),pre(n1,0);int sm0;forr(i,1,n)cin>…...

程序员鱼皮AI智能体项目学习体验分享|给Java学习者的真实参考

各位正在学习Java的小伙伴们&#xff0c;大家好&#xff5e; 最近我刚完整做完程序员鱼皮的AI智能体项目&#xff0c;发现不少同学对这个项目很感兴趣&#xff0c;结合我自己的学习全过程和真实感受&#xff0c;今天就来跟大家好好分享一波&#xff0c;也给纠结要不要学这个项目…...

自学渗透测试第20天(防火墙基础与规则配置)

7.3 防火墙基础与规则配置&#xff08;第20天&#xff09;核心目标理解防火墙原理&#xff1a;掌握包过滤、状态检测、应用层代理等防火墙工作原理&#xff0c;理解iptables/netfilter架构。掌握iptables配置&#xff1a;熟练使用iptables命令配置防火墙规则&#xff0c;实现访…...

【Blazor 2026开发生存指南】:9类高频编译/运行时报错的根因诊断与秒级修复方案

第一章&#xff1a;Blazor 2026开发生存指南&#xff1a;核心演进与错误治理范式Blazor 在 2026 年已全面转向 WebAssembly 优先架构&#xff0c;.NET Runtime 嵌入式沙箱实现原生级启动性能&#xff0c;同时服务端渲染&#xff08;SSR&#xff09;与交互式客户端渲染&#xff…...

如何快速上手Riak:10分钟构建你的第一个分布式应用

如何快速上手Riak&#xff1a;10分钟构建你的第一个分布式应用 【免费下载链接】riak Riak is a decentralized datastore from Basho Technologies. 项目地址: https://gitcode.com/gh_mirrors/ri/riak Riak是一款来自Basho Technologies的分布式数据存储系统&#xff…...

毕业季如何应对“双重危机”?百考通AI的查重与降AIGC解题思路

在2026年的学术赛道上&#xff0c;一个工具就能精准锁定重复率与AI痕迹&#xff0c;让你从焦虑走向从容 凌晨三点&#xff0c;宿舍里的灯光依旧亮着&#xff0c;屏幕上光标在修改了数次的段落间反复跳动。重复率居高不下&#xff0c;AIGC 检测预警频闪——这已成为 2026 年毕业…...

VAE与扩散模型的reconstruction–generation dilemma

论文: https://arxiv.org/abs/2603.05630代码: https://github.com/tongdaxu/Making-rFID-Predictive-of-Diffusion-gFID.git很多做 latent diffusion 的人都见过一个很别扭的现象&#xff1a;你把 VAE 训练得很好&#xff0c;重建出来的图像非常清楚&#xff0c;rFID 也很好看…...

Harmonyos状态管理6:@Watch

物联网设备监控系统 - @Watch 演示 核心功能 @Watch 装饰器使用: 为 device 状态添加 @Watch(onDeviceStatusChange) 监听 当设备状态变化时自动触发回调函数 物联网设备数据: 设备信息:ID、名称、类型 状态信息:在线状态、信号强度 传感器数据:温度、湿度、气压 时间信息…...