在八枚银币中,有一枚是假币,并且我们已知这一枚假币与其他七枚真币的重量不同,但不知道这一枚假币与其他七枚真币相比较而言是轻还是较重。我们可以通过一架天平来任意比较两组银币,设计一个高效的算法来检测出这一枚假币。
算法分析
大致算法过程见图1,以下为详细分析:
用一个数组存储八枚银币,首先将其分为两组:coins[0]、coins[1]、coins[2]和coins[3],coins[4],coins[5]进行比较。
(1)如果coins[0]+coins[1]+coins[2]==coins[3]+coins[4]+coins[5],就可以肯定这一枚有问题的硬币在coins[6]和coins[7]中。那么就比较coins[6]和coins[7]:
①如果coins[6]>coins[7],那么再比较coins[6]和coins[0]。
如果coins[6]=coins[0],那么就说明coins[7]为假币且较轻。如果coins[6]>coins[0],那么就说明coins[6]为假币且较重。
②如果coins[6]<coins[7],那么再比较coins[7]和coins[0]。
如果coins[7]=coins[0],那么就说明coins[6]为假币且较轻。如果coins[7]>coins[0],那么就说明coins[7]为假币且较重。
(2)如果coins[0]+coins[1]+coins[2]>coins[3]+coins[4]+coins[5]&#