1、8枚硬币问题
在8枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道的是假币与真币相比较是轻还是重。可以通过一架天平来比较两组硬币:
减治法将原问题一分为三,8枚硬币分别表示a,b,c,d,e,f,g,h,从8枚中取6枚在天平两端各放3枚比较,三种结果:
a+b+c>d+e+f
a+b+c=d+e+f
a+b+c<d+e+f
如下所示判定树是完整表示整个判定过程:
代码就比较好写,直接按照判定树的过程即可:
/*8枚硬币中有一枚为假币,不知假币是轻是重,
天平只能比较轻重(元素只能相加和比较)*/
#include<stdio.h>
bool v;
int index;
int EightCoin(int B[]){
int a,b,c,d,e,f,g,h;
a=B[0];b=B[1];c=B[2];d=B[3];
e=B[4];f=B[5];g=B[6]