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)/3

b堆: (n-n%3)/3

c堆: (n-n%3)/3

d(余数堆): n%3

逻辑过程:

1.判断n中的硬币数量,如果n>2则执行2,否则执行4.

2.将n分为上图的四堆,拿 a 和 b 比较,如果 a > b ,则假币在 a 中。否则假币在b中。

3.如果 a == b,则拿 a 和 c 比较。如果 a == c,则假币在d(余数堆)中。将 d 再次执行流程1,并且n=n%3。如果不等,则假币在 c 中,将 c 再次 执行流程1,并且n=(n-n%3)/3。

4.如果n==2,则将两枚硬币进行比较找出假币。

5.如果n==1,则该硬币就是假币,输出结果结束

# -*- coding: utf-8 -*-

"""

Created on Sun Oct 18 20:23:22 2020

@au

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值