1. 实验题目
在 8 枚外观相同的硬币中, 有一枚是假币, 并且已知假币与真币的重量不同, 但不知
道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币, 设计一个高
效的算法来检测出这枚假币。
2. 实验目的
(1 ) 深刻理解并掌握减治法的设计思想;
(2 ) 提高应用减治法设计算法的技能;
(3 ) 理解这样一个观点: 建立正确的模型对于问题的求解是非常重要的。
3. 实验要求
(1 ) 设计减治算法实现8 枚硬币问题;
(2 ) 设计实验程序, 考察用减治技术设计的算法是否高效;
(3 ) 扩展算法, 使之能处理n 枚硬币中有1 枚假币的问题。
4. 问题分析
将T(n)的问题转化为T(n/3)的问题
5. 算法思路
1.创建4个数组,前三个的数量为n/3;最后一组为n%3
2.先对前三组的质量进行判断
2.1前三组相等,对第四组进行递归处理
2.2前三组不等,可能会出现:
2.2.1 1=2>3
2.2.2 1=2<3
2.2.3 1=3>2
2.2.4 1=3<2
2.2.5 2=3>1
2.2.6 2=3<1
然后对较大或者较小组进行递归处理
3.递归结束的标志是n==1或者n==2
4.输出假币的大小
5.输出假币的位置
6. 算法实现
#include <bits/stdc++.h>
using namespace std;
const int N = 1001; //假设求解8枚硬币问题
int a[N]