在n枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重。可以通过一架天平来任意比较两组硬币,设计一个高效的减治算法来检测出这枚假币。
提示:将硬币分成A、B、C三组,如果A等于C,则假币在B组,递归将B三等分,重复上述步骤;如果A不等于C,则假币在A和C中,分别将A和B、C和B比较,哪个不等于B,则假币必在其中,递归将其三等分,重复上述步骤。注意,当分组里的硬币数少于3个时,无须划分,直接将组里某个硬币与组外任一硬币比较,不同即是假币,相同的话说明另外一个必是假币。
#include
using namespace std;
#define numnum 9
int coin[numnum] = {2,2,2,2,2,2,2,2,4};
int Number_Sum(int arr[],int low,int high)
{
int sum = 0;
for(int i = low;i<=high;i++)
sum += arr[i];
return sum;
}
int nCoin(int coin[], int n, int low, int high)
{
int k = n/3;
int Remain = n%3;
if(Remain == 0) 余数为零的情况!
{