新闻  |   论坛  |   博客  |   在线研讨会
教授与学生 (answer)
shadowind | 2008-07-26 19:52:55    阅读:513   发布文章

定义函数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。

根据上述递归,可方便地写出程序来计算任一游戏参与者猜出自己头上的数的轮次;稍
做修改,可根据任一人在第几轮上猜出了自己头上的数和那个数,求出其他两人的所有
可能解。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客