"); //-->
定义函数guess(x1,order1,x2,order2,order).x1和x2分别为顺序为order1和order2的
人头上的数,order为第三个人的顺序,该函数返回顺序为order的人猜出自己头上的
数的轮次。
用递归写出该函数的解。
guess(x1,order1,x2,order2,order)
=1 if x1=x2; else (1)
=guess(x1,order1,x2-x1,order,order2) if x2>x1 and order2<order; else (2)
=guess(x1,order1,x2-x1,order,order2)+1 if x2>x1 and order2>order; else (3)
=guess(x1-x2,order,x2,order2,order1) if x1>x2 and order1<order; else (4)
=guess(x1-x2,order,x2,order2,order1)+1 if x1>x2 and order1>order. (5)
其中式(1)是显然的,(2)到(5)是根据下述思想得到:任何一个人(设为A)若发现其他两数
不相等,则假设自己的数为其他两数之差,并计算出拥有较大数的那人(设为B)在看到另
一个人(设为C)和自己头上的两个数时猜出他(B)头上的数的轮次(注意,此时应假设B看
到A头上的值为value(B)-value(C))。若到了该轮次B为猜出,则A可在该轮或下一轮猜出
自己头上不是两数之差,而是两数之和。
设A为54,B为90。
guess(54,1,90,2,3)=guess(54,1,36,3,2)=guess(18,2,36,3,1)=guess(18,2,18,1,3)+1
=2.
C将在第2轮猜出自己是144。
根据上述递归,可方便地写出程序来计算任一游戏参与者猜出自己头上的数的轮次;稍
做修改,可根据任一人在第几轮上猜出了自己头上的数和那个数,求出其他两人的所有
可能解。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。