减治法应用--假币问题实验

1. 实验内容

1)减治法应用实现
在n枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,设计一个高效的减治算法来检测出这枚假币。
int nCoin(int coin[], int n, int p, int q);
coin[]数组存储各枚硬币的重量。

2.算法分析

在假币问题中,每次用天平比较后,只需解决一个规模减半的问题,所以,它属于一个减治算法。解决这个问题的最自然的想法就是一分为二,也就是把n枚硬币分成两组A、B,每组有[n/2]枚硬币,如果n为奇数,就留下一枚硬币C,然后把两组硬币分别放到天平的两端。如果两组硬币的重量相同,那么留下来的硬币C就是假币;否则,假币就出现在和[n/2]*C重量不相等的一组里,重复上述过程直至找到假币。

2.1 算法的改进

考虑不是把硬币分成两组,而是分成三组,前两组有[n/3]枚硬币A和B,其余的硬币作为第三组C,将前两组硬币放入天平比较。如果他们的重量相同,那么假币一定在第三组C中,用同样的方法对第三组C进行处理;如果前两组的重量不相等,那假币就出现在和(C/ (n-[n/3]*2))*n/3重量不相等的一组里,重复上述过程直至找到假币。在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值