转载请注明出处,谢谢~
背景说明:
现有八枚硬币a,b,c,d,e,f,g,h,已知其中一枚硬币是假币,其重量不同于真币,但不知道它是轻还是重,如何使用天平,以最少的比较次数,判断哪枚硬币是假币,并得知它是轻还是重。
不用白话文解释了吧。。。
首先果断放弃两两比较的方法,可行但肯定不是最快解。
这里我们用分段处理,将8个硬币分成三组,第一组是1,2,3;第二组是4,5,6;第三组是7,8.我们比较前两组的重量,如果相等,那么假币就存在与第三组中,再次比较第三组中两个硬币的重量,然后将较重的一个跟第一个硬币比较重量,就可以得知那个硬币是假币,并且得知轻重了,其他的情况于此类此,下面用代码走一遍看看逻辑执行。
void compare(int coins[],int i,int j, int k)
{
if(coins[i] > coins[k])
pri