假币问题python

第2关:找假币问题(python 分治法),没人写就我自己来 找假币问题是一个比较简单且典型能够体现计算思维的问题。假设现在有n(n>=2)枚硬币,已知其中一枚为假币,且知道假币的重量是比真币轻的,请思考如何用分治思想解决该问题。本次实验中我们采用二分法解决假币问题。二分法是一个非常典型的分治思想的应用。前提假设:假币比真币轻,真币重量一致。如果没有假币,索引和重量位置均为-1。 阅读详情

​​​​​​​假币问题:

 

  这里假币默认比真币轻,而且是每次比较两堆,即一个天平。

def compare(coinA, coinB): #比较两堆硬币的重量
    if sum(coinA) < sum(coinB):
        result = 'left'
    elif sum(coinA) > sum(coinB):
        result = 'right'
    else:
        result = 'eqal'
    return result

def split(coin,n): #分割coin硬币为两堆
    coinA = coin[0: n // 2]
    coinB = coin[n // 2: n]
    return coinA, coinB

def Judge(coin,index): #判断硬币中假币的位置
    n = len(coin)
    if n == 0:
        print('no coins')
    elif n == 1:
        print(' fake coin index:', index)
    elif n == 2:
        if coin[0] < coin[1]:
            print('fake coin index:', index)
        else:
            print('fake coin index:', index+1)
    elif n % 2 == 0 and n > 2:
        coinA, coinB = split(coin, n)
        result = compare(coinA, coinB)
        if result == 'left':
            coin = coinA

            Judge(coin, index)

        elif result == 'right' :
            index += n / 2
            coin = coinB

            Judge(coin, index)

        else:
            print(n)
    elif n % 2 == 1 and n > 2:
        coinA,coinB = split(coin, n-1)
        result = compare(coinA, coinB)
        if result == 'eqal':
            print('fake coin index:', index)
        else:
            if result == 'left':
                coin = coinA

                Judge(coinA, index)

            else:
                index += (n-1) / 2
                coin = coinB

                Judge(coinB, index)

#设置假币数组,当然你可以随机生成,生成的假币比真币轻,而且真币质量相等
coin = [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 10, 10, 10, 10, 10]
index = 0
print(coin)
Judge(coin, index)

算法

input:真假币组成的数组,其值为质量,假币默认为轻。事先不知各个重量
output:假币下标
function:compare()//比较两堆硬币的质量
function:coinA, coinB = split()//分割硬币为两堆

Judge()// 主函数,参数为硬币和下标
	n = 硬币个数
	if n == 0
		没有硬币
	elif n ==1
		该币为假币
	elif n == 2
		compare()
		假币为较轻者
	elif n % 2 == 0 and n > 2
		compare()
		if 假币在A堆里
			Judge(coinA,index)
		elif 假币在B堆里
			Judge(coinB,index)
	else 此时先取出末尾一个硬币,使其数量为偶
		compare()
		if 两堆硬币质量相等
			假币为取出的那个
		else
			coinA,coinB中较轻者另其为coin
			Judge(coin,index)
			
			

python八枚硬币问题 用python写算法之八枚硬币问题 先来看算法要求: 在8枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测这枚假币。 我刚开始看到这个算法的时候,有点蒙,这。。这直接排序不久完了吗。。哈哈哈,那是肯定不行的。我觉得在我看到一个问题的时候,我首先要想到是的,不要为了答案去解决问题,就像 阅读详情

相关推荐

算法分析之假币问题源代码

内含假币算法求解(三分算法和二分算法)源代码

python24:分治法找假币

将两堆硬币上天平比较重量,如果有一堆较轻,那么假的硬币必然在轻的那一堆中。如果两堆硬币重量相等,且两堆之外有一个剩余硬币,则那个剩余硬币就是假硬币。如果两堆硬币重量相等,且两堆之外没有剩余硬币,则查找任务失败,未发现假硬币。有一堆共n枚硬币,其中一枚是假币,外观上无法区分,只知道假币的重量稍轻。要求仅使用一个天平,使用最少的重量比较次数找出假硬币。直接从第一张纸币遍历所有纸币,找到质量小的纸币就返回下标,否则返回“找不到”方法一:分治法(麻烦且非常非常非常非常非常非常非常非常非常没有必要)

m0_74172507的博客 2386

Python实现三分法查找假币问题

三分法查找假币问题

c语言假币问题的编程,假币问题 (C语言代码)

解题思路:/*将硬币平均分成三堆:A,B,C,若不能平分,则需保证A,B两堆必须数目相同,且A,B的数量要比C多,其中AB用于称重比较对于一次称重,若A==B,则假币在C,若A!=B,则,假币在轻的那堆。然后对假币所在的那堆,继续分三堆处理……直到找到假币注意:虽然分两堆,也能找到假币,但显然需要称重的次数要比分三堆的次数多一些,不符合题目要求。A,B的数量要比C多,是为了保证算法的正确性...

weixin_35940071的博客 3705

ADS新手必看:5分钟搞定Smith圆图阻抗匹配(附详细操作截图)

本文为射频电路设计新手提供了在ADS软件中快速使用Smith圆图进行阻抗匹配的实战指南。通过清晰的步骤和操作截图,详细演示了如何从负载阻抗点出发,通过添加电感和电容元件,在5分钟内完成向50欧姆标准阻抗的匹配,并介绍了仿真验证与性能调优的方法,帮助工程师和学生直观掌握这一核心技能。

weixin_29261711的博客 392

在ArcGIS Pro软件中进行滑坡的敏感性和易发性分析

滑坡的敏感性和易发性分析需要综合地形、水文、地质及环境等多维数据,本文罗列了基于ArcGIS Pro软件进行的一系列可执行分析。

weixin_49609713的博客 1732

最小假币问题的Python实现

假设由29枚硬币,其中一枚假币,假币比真币重,有一个量程和精度足够的天平,怎样保证最少称重次数找出假币? 思路: 将硬币分为3堆,则每堆的硬币数量为n/3,但是这是在n%3==0的情况下才能成立,所以我们将n枚硬币分为3堆加1堆 余数堆(余数堆可能为0),则可分为如下(n-n%3)/3, (n-n%3)/3, (n-n%3)/3, n%3。 如下分组: a堆:(n-n%3)/3 b堆:(n-n%3)/3 c堆:(n-n%3)/3 d(余数堆): n%3 逻辑过程: ...

闲时不练功,忙时一场空 1459

【紫光同创PG2L200H开发板】盘古200Pro+开发板(MES2L676-200HP)

开发板 SMA接口符合标准 SMA 接口规范,可使用”内螺旋+插针“的 SMA 线连接板卡”外螺旋+插孔”的 SMA 接口进行通信,板卡 SMA 接口与 FPGA 的 HSST 收发器的一路 RX/TX 相连,TX信号和 RX 信号都是以差分信号方式通过隔直电容连接 FPGA 和 SMA 接口, TX 发送和 RX 接收数据速率高达 6.6Gb/s。为了减轻带电插拔造成对 FPGA 芯片的损坏,在设计上在 JTAG 信号位置添加了保护二极管来保证信号的电压在 FPGA 接受的范围,避免 FPGA 的损坏。

MYMINIEYE的博客 2884

python寻找假硬币_最小假币问题的Python实现

假设由29枚硬币,其中一枚假币,假币比真币重,有一个量程和精度足够的天平,怎样保证最少称重次数找出假币?思路:将硬币分为3堆,则每堆的硬币数量为n/3,但是这是在n%3==0的情况下才能成立,所以我们将n枚硬币分为3堆加1堆 余数堆(余数堆可能为0),则可分为如下(n-n%3)/3, (n-n%3)/3, (n-n%3)/3, n%3。如下分组:a堆:(n-n%3)/3b堆:...

weixin_39968309的博客 1689

MID360+fastlio功能笔记

前言。

qq_35598561的博客 5300

Prompt Learning 简介

• Prompt Learning 可以将所有的任务归一化预训练语言模型的任务• 避免了预训练和fine-tuning 之间的gap,几乎所有 NLP 任务都可以直接使用,不需要训练数据。• 在少样本的数据集上,能取得超过fine-tuning的效果。• 使得所有的任务在方法上变得一致。

jxsdq的博客 1万+

假如8个硬币中寻找1个假币的问题,python来回答。

确定假币(假设假币比真币轻,若假币可能更重则调整比较方向即可)。在8000万枚硬币中检测10000枚假币的问题,传统分治法效率不足,需结合。表示真币),函数返回假币的位置(1-based索引)。要解决8个硬币中寻找1个假币的问题,最优策略是通过。:最优解为2次称量,通过合理分组可快速定位假币。假设假币比真币轻(用。

软件行业技术文化交流。 1080

基于RK3588与FPGA的SDI视频处理系统:从MIPI CSI-2输入到DSI输出的全链路解析

本文深入解析了基于RK3588与FPGA的SDI视频处理系统全链路。系统利用FPGA作为高速接口转换与流管理核心,将SDI信号转换为MIPI CSI-2数据流送入RK3588进行智能图像处理与AI分析,处理结果再通过MIPI DSI回传,最终由FPGA控制编码为SDI输出,实现了专业视频接口与强大算力的高效协同。

s1t2u3的博客 667

python 余数最小_最小假币问题的Python实现

假设由29枚硬币,其中一枚假币,假币比真币重,有一个量程和精度足够的天平,怎样保证最少称重次数找出假币?思路:将硬币分为3堆,则每堆的硬币数量为n/3,但是这是在n%3==0的情况下才能成立,所以我们将n枚硬币分为3堆加1堆 余数堆(余数堆可能为0),则可分为如下(n-n%3)/3, (n-n%3)/3, (n-n%3)/3, n%3。如下分组:a堆:(n-n%3)/3b堆:...

weixin_39799561的博客 241

HLA分型

HLA分型 一、根据WES的tumor数据进行数据分型 选用hlahd 软件安装及使用 [root@18605fd8771e ~]# wget https://jaist.dl.sourceforge.net/project/bowtie-bio/bowtie2/2.4.1/bowtie2-2.4.1-linux-x86_64.zip [root@18605fd8771e ~]# unzip bowtie2-2.4.1-linux-x86_64.zip && mv bowtie2-2.4.1

qq_23435961的博客 2488

手把手教你学Simulink--双足机器人的自动避障控制策略仿真

自动避障是双足机器人导航系统中的一个关键功能,它允许机器人在动态或静态环境中自主地避开障碍物。实现这一功能通常需要结合路径规划、环境感知和实时控制算法。在本教程中,我们将使用MATLAB和Simulink来创建一个简化版的双足机器人自动避障控制系统仿真。

MHD0815的博客 160

python 最小硬币数_最小假币问题的Python实现

假设由29枚硬币,其中一枚假币,假币比真币重,有一个量程和精度足够的天平,怎样保证最少称重次数找出假币?思路:将硬币分为3堆,则每堆的硬币数量为n/3,但是这是在n%3==0的情况下才能成立,所以我们将n枚硬币分为3堆加1堆 余数堆(余数堆可能为0),则可分为如下(n-n%3)/3, (n-n%3)/3, (n-n%3)/3, n%3。如下分组:a堆:(n-n%3)/3b堆:...

weixin_29820757的博客 327

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Python数据结构与算法】枚举----假币问题

其中有11枚真币和1枚假币。朋友希望赛利称三次就能找出假币并且确定假币是轻是重。例如:如果赛利用天平称两枚硬币,发现天平平衡,说明两枚都是真的。如果赛利用一枚真币与另一枚银币比较,发现它比真币轻或重,说明它是假币。经过精心安排每次的称量,赛利保证在称三次后确定假币。输入有三行,每行表示一次称量的结果。每次称量的结果用三个以空格隔开的字符串表示:天平左边放置的硬币 天平右边放置的硬币 平衡状态。天平左右的硬币数总是相等的。输出哪一个标号的银币是假币,并说明它比真币轻还是重(heavy or light)。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 7万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

量化面试绿皮书:15. 假币一

这道面试题的本质是考察候选人将复杂系统抽象为数学模型的能力和在强约束条件下设计信息最大化方案的能力,这类能力直接对应量化金融中高频交易系统优化、风险因子识别、以及市场异常检测等核心挑战。

船长Q的博客 1174

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

减治法之三分法处理假币问题-python代码

def check_coin_3(a,right,left): b = (left - right +1) // 3 if right == left: location1 = right + 1 return location1 elif right+1 == left: if a[right] &lt; a[left]: ...

heiheiqianqian的博客 4426

十二硬币问题

十二硬币问题 == 解题思想源于“约翰·比斯利”(一个歪果仁) ##1、问题重述 给出12个硬币,其中一个是假硬币,用一个天平来确定三种重量的假币(其中假币可能比其他硬币轻或重)。问:至少称量多少次能够保证判断出:是否假币,而且如果有,确定假币是哪一颗, ##2、问题推导 ###3颗硬币的情况 我们分析3颗硬币的情况,是为了得出一种分类方法。 三枚硬币测量如图: 经过这两次称重之后,我们可...

YIF_LEE的博客 5175

程序设计与算法(二)算法基础课--1、枚举 python实现

程序设计与算法(二)算法基础课--1、枚举 python实现题1:完美立方解题思路:python代码:题2:生理周期解题思路:python代码:题3: 假币问题解题思路python代码题4: 熄灯问题解题思路python代码 程序设计与算法(二)算法基础课–1、枚举 python实现 课程源自mooc网,北京大学郭炜老师的课程,这里只是作为课程笔记分享,原课程使用c++实现,这里用python实现...

ciecus_csdn的博客 2231

A*算法解12硬币问题

利用A*算法求解12硬币,可拓展为16,28硬币等

MrGong123的博客 783

菜鸟来也!我用Python庖丁解牛了一道大厂的笔试题

今天分享一道非常著名的笔试题,曾经在多个大厂招聘中出现过, 有时在笔试题里面,有时面试环节中。其实主要是考察程序员对这类问题的处理的算法和思路,到底难不难的呢,菜鸟也能手撕这道大厂的题,...

cainiao_python的博客 508

如果天平不平衡,较轻的一端的2枚硬币中包含假币,再将这2枚硬币放在天平的两端进行第三次称量,较轻的一端的硬币就是假币

2. **根据第一次称量的结果进行判断:** - **如果天平平衡:** 这意味着假币在未称量的3枚硬币中。 - 从这3枚硬币中任取2枚,放在天平的两端进行第二次称量。 - 如果天平平衡,那么未称量的第3枚硬币就是假币。 - 如果天平不平衡,较轻的一端的硬币就是假币。 - **如果天平不平衡:** 这意味着假币在较轻的一端的4枚硬币中。 - 从这4枚硬币中任取2枚,放在天平的两端进行第二次称量。 - 如果天平平衡,那么假币在未称量的2

[Blog][Domain] programb.blog.youkuaiyun.com 1293

【人工智能-01-01】人工智能导论——假币问题

【人工智能-01-01】人工智能导论——假币问题

reasonsummer的博客 469
上一篇: 坏巧克力 两个玩家轮流掰一块m*n的巧克力,其中一块1*1的小块是坏的。每次掰只能顺着方格的边界,沿直线一掰到底。每掰一次,掰的人把两块中不含坏巧克力的那块吃掉,谁碰到最后那块坏巧克力就算输了。
下一篇: 俄式乘法python
Alocus_
Alocus_ 新星创作者: 人工智能技术领域 新星创作者: 人工智能技术领域
博客等级 码龄9年 2万+粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alocus_

如果我的内容帮助到你,打赏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值