在120枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,最坏情况下,能不能只比较5次就检测出这枚假币?

本文主要是介绍在120枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,最坏情况下,能不能只比较5次就检测出这枚假币?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这道题目我想先通过另外一道题目引入我的方法:

13枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,最坏情况下,能不能只比较3次就检测出这枚假币?

将13枚硬币分为三组

ABCD  EFGH  IJKLM

这里引入一个概念,每次天平倾斜方向称之为X方向、Y方向、和平衡

X方向不一定就是向左倾斜,只不过和Y方向是相对的。我们可以定义任意一种倾斜方向为X方向

(注:当文中所说M和N进行比较时,默认前一个放X位,后一个放在Y位,即M在X位,N在Y位)

将ABCD和EFGH进行比较:

得到三种情况:L位倾斜、R位倾斜和平衡

假设平衡,则比较IA和JK,如果还是平衡则比较L和A可以得到是L还是M的问题,如果不平衡则记录倾斜方向,假设为X方向倾斜,最后比较J和K,如果第三次和第二次一样位X方向倾斜,则假币没有变换方向为K反之为J,平衡则为I

但是最坏情况下应该是第一次使用天平就发生倾斜,假设为X位倾斜则第二次比较ABE和CDF,如果平衡则在GH中,略。如果不平衡,则要则要看第二次使用天平是否和第一次一样是X方向倾斜,如果还是X方向倾斜则假币没有变换方向,假币在ABF中,反之在CDE中,假设第一次第二次都是X方向倾斜,则假币没有变换方向那么假币一定在ABE中,如果变换方向为Y方向倾斜则假币在过程中调换方向假币在CDE中。

假设假币在ABF中,那么第三次我们比较A和B,还是X方向倾斜则假币三次都没有变换方向所以假币为A,反之假币为B,平衡则为F,同理。

通过这道题,我思考了一个概念,N次使用天平最多能找到多少个硬币中的假币呢?

每一次进行比较我们都有三中状态,X方向倾斜、Y方向倾斜、和平衡

那上题中3次使用天平我们就可以得到 3^{3} =27种不同的结果,这时我想到XYX和YXY方向倾斜其实本质上是一样的,因为我们由于假币重量是重还是轻是未知的,所以只能判断第一次使用天平和第二次方向是相同还是相反的,所以这个结果需要除以2,但是有一种情况例外:即三次都为平衡状态,所以我们要先在总的情况下-1

所以,我们最终会得到 (3^{3}-1)/2 = 13 种情况,也就是说最终我们会获得13种不同的情况,也就是在13个硬币下使用三次天平找到假币。

同理5次使用天平最多在(3^{5}-1)/2 = 121种情况,也就是最多在121枚硬币中使用五次天平找到假币

推广到N次,则N次最多在(3^{N}-1)/2 个硬币中找到假币

对于本题具体的实践过程比较复杂,将三维推广到五维更加难写,欢迎大家能够整理出具体过程并在评论区附上链接。


2022.10.18于山东工商学院西校区5257

这篇关于在120枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,最坏情况下,能不能只比较5次就检测出这枚假币?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/801235

相关文章

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

电脑软件不能安装到C盘? 真相颠覆你的认知!

《电脑软件不能安装到C盘?真相颠覆你的认知!》很多人习惯把软件装到D盘、E盘,刻意绕开C盘,这种习惯从哪来?让我们用数据和案例,拆解背后的3大原因... 我身边不少朋友,在使用电脑安装软件的时候,总是习惯性的把软件安装到D盘或者E盘等位置,刻意避开C盘。如果你也有这样的习惯,或者不明白为什么要这么做,那么我

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语