【问题】在n枚外观相 司的硬币中,有一枚是假币,并且已知假币较轻。可以通过架天平来任意比较两组硬币 从而得知两组硬币的重量是否相同,或者哪一组更轻一些,
假币问题:要求设计一个高效的算法来检测 出这枚假币。
#include <iostream>
using namespace std;
const int N = 8; //假设求解8枚硬币问题
int a[N] = {2,2,1,2,2,2,2,2};
int Coin(int low, int high, int n);
int main()
{
int i=Coin(0,7,8);
cout<<"假币是第"<<i<<"个"<<endl;
return 0;
}//真币的重量是2,假币的重量是1
//在a[low]~a[high]中查找假币
int Coin(int low, int high, int n)
{ // num1、num2和num3存储3组硬币的个数
int i, num1, num2, num3;
int add1 = 0, add2 = 0; //add1和add2存储前两组硬币的重量和
if (n == 1) //递归结束的条件
return low + 1; //返回的是序号,即下标加1
if (n % 3 == 0) //3组硬币的个数相同
num1 = num2 = n / 3;
else //前两组有 n/3向上取整 枚硬币
num1 = num2 = n / 3 + 1;
num3 = n - num