用伪代码解答真假币问题
问题描述:
如果事先只知道假币和真币不一样,而不知道是轻是重。给你12个钱币其中一个是假币,能使用天平3次把假币找出来吗?用伪码描述过程。
//将12枚钱币平分为3组为A,B,C三组,且每组4个分别记为(A1,A2,A3,A4),(B1,B2,B3,B4),(C1,C2,C3,C4)
begin
if A == B //A组和B组重量相等,那么假币在C组
then
if A1+A2+A3 == C1+C2+C3
then
输出C4是假币
else if A1+A2+A3 > C1+C2+C3 //C1,C2,C3中有一个更轻的假币
then
if C1 == C2
then
输出C3是更轻的假币;
else if C1 > C2
then
输出C2是更轻的假币;
else
C1是更轻的假币;
else if A > B //A组有一个更重的假币或者B组有一个更轻的假币。C组全部为真币
then
if A1+A2+A3+B1+B2 == A4+C1+C2+C3+C4//此时假币在B3,B4之中
then
if B3 == B4
then
输出A4是更重的假币;
else if B3 > B4
then
输出B4是更轻的假币;
else
输出B3是更轻的假币;
else if A1+A2+A3+B1+B2 > A4+C1+C2+C3+C4 //此时假币在A1,A2或A3之中
then
if A1 == A2
then
输出A3是更重的假币;
else if A1 > A2
then
输出A1是更重的假币;
else
输出A2是更重的假币;
else if A1+A2+A3+B1+B2 < A4+C1+C2+C3+C4 //此时假币在B1,B2或A4之中
then
if B1 = B2
then
输出A4是更重的假币
else if B1 > B2
then
输出B2是更轻的假币
else
输出B1是更轻的假币
else if A< B //A组有一个更轻的假币或者B组有一个更重的假币。C组全为真币。
then
if A1+A2+A3+B1+B2 == A4+C1+C2+C3+C4 //此时假币在B3,B4之中
then
if B3 == B4
then
输出A4是更轻的假币;
else if B3 > B4
then
输出B3是更重的假币;
else
输出B4是更重的假币;
else if A1+A2+A3+B1+B2 > A4+C1+C2+C3+C4 //此时假币在A4,B1,B2之中
then
if B1 = B2
then
输出A4是更轻的假币
else if B1 > B2
then
输出B1是更重的假币
else B1 < B2
输出B2是更重的假币
else if A1+A2+A3+B1+B2 < A4+C1+C2+C3+C4 //此时假币在A1,A2或A3之中
then
if A1 = A2
then
输出A3是更轻的假币
else if A1 > A2
then
输出A2是更轻的假币
else
输出A1是更轻的假币
end

浙公网安备 33010602011771号