计算机语言与程序设计

计算机语言与程序设计

ID:44996391

大小:123.00 KB

页数:39页

时间:2019-11-07

计算机语言与程序设计_第1页
计算机语言与程序设计_第2页
计算机语言与程序设计_第3页
计算机语言与程序设计_第4页
计算机语言与程序设计_第5页
资源描述:

《计算机语言与程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、聪明的学生A、B、C三人所戴的帽子上各有一个数字,分别为a、b、c。每个人只能看到其他二人帽子上的数,而不能看到自己头上的数字。可是每个人都知道某两个数相加等于另一个数。规定猜数的顺序是ABCA…。首猜为A,定义为n=1;次猜为B,定义为n=2;再猜为C,定义为n=3;依次类推。如果告诉你第n次猜的人猜出自己头上的数是m,问这三个数是什么数?比如给出n=3,m=2,表示猜中者为C,c=m=2,你的程序应推论出a=b=1。1分析这是一道比较难的题,想得不对就编不出来。分析问题的思路:考虑每个人在猜数时要“设身处地,顾此思彼”。比如在C猜时,一方面要猜自己

2、头上的数字可能是什么?还要往前想:为什么B猜不出?A猜不出?为了分析方便,定义一个猜中与否的函数(函数值为布尔类型)check(a,b,c,k)k=1表示A猜,k=2表示B猜,k=3表示C猜,下面我们用一个例子来说明思路。2例子a=1,b=2,c=3.1.第一步让A先猜:A只能看到b=2,c=3,他会想到自己头上的数不是1就是5。在有两种可能的情况下,A不敢猜,只能放弃。A面对的猜测函数有两个:check(b+c,b,c,1)=check(5,2,3,1);check(

3、b-c

4、,b,c,1)=check(1,2,3,1);32.第二步让B猜:B看到a=1,c

5、=3,他会想到自己头上的数不是2就是4。B面对的猜测函数为:check(a,a+c,c,2)=check(1,4,3,2);check(a,

6、a-c

7、,c,2)=check(1,2,3,2);4B还会想为什么A猜不到呢?B想:①如果b2=2,A看到b=2,c=3,会想到自己头上的数是②如果b2=4,A看到b=4,c=3,会想到自己头上的数是这两种情况A都不敢猜。B认为A不敢猜有道理,B自己也不敢猜。53.第三步让C猜:C看到a=1,b=2,他会想到自己头上的数不是1就是3。C面对的猜测函数为:check(a,b,a+b,3)=check(1,2,3,3);ch

8、eck(a,b,

9、a-b

10、,3)=check(1,2,1,3);6C会想为什么B猜不到呢?C想:如果c3=1,对B而言,B看到a=1,c3=1,B会很快判断出b=a+c3=1+1=2。可是B并未猜出,说明c3=1应被排除。两种可能性,一个被排除了,另一个就是所求了,即c3=3。我们用“与或”结点图来描述C的猜测过程。7在上图中,CB1表示的是,C想:如果自己头上是3,B能不能猜出b=2。CB2表示的是,C想:如果自己头上是1,B能不能猜出b=2。8C推测B对C头上的两种可能数字的反映,来判定该排除哪一个,保留哪一个。如果能够保留一个排除一个则CB=true;如

11、果两个都保留或两上都排除,则CB=false。因此CB应为CB1与CB2的异或运算结果。上述这张图的物理意义是:要想判断check(1,2,3,3)是true还是false?要把它转化为check(1,2,3,2)XORcheck(1,2,1,2)check(1,2,1,2)是说让B猜,B如果看到c=1,a=1,他会抢先猜到自己头上的数是2。但这不是事实,因为B没敢猜。可见B看到的不是c=1,而是另一种可能c=3。故B帮助C排除了一种可能,成全了C,让C猜到c=3。9下面我们给出更为全面的与或结点图。3人猜自己帽子上的数的“与或”结点图。定义:check(a,

12、b,c,k)为猜数函数,为布尔型函数。其中a,b,c分别为A、B、C三人帽子上的数,k为第k次猜。规定k=1为A猜,k=2为B猜,k=3为C猜。如猜测次数超过3,则有kmod3=1为A猜,kmod3=2为B猜,kmod3=0为C猜。1011AC1=check(b+c,b,c,k-1);AC2=check(abs(b-c),b,c,k-1);AC=AC1XORAC2;BA1=check(a,a+c,c,k-1);BA2=check(a,abs(a-c),c,k-1);BA=BA1XORBA2;CB1=check(a,b,a+b,k-1);CB2=check(a,

13、b,abs(a-b),k-1);CB=CB1XORCB2;12说明:1.结点F是函数check(a,b,c,k),意思是第k次猜出来了吗?如果函数值为true表示猜出来了,false表示猜不出来。2.结点F是一个或结点,以k=0还是k>0分支。当k=0时为直接可解结点E,函数值为false,可解释为还没让猜,当然为false。133.当k>0时,分支至D结点。D也是一个或结点,有三个分支:当kmod3=1时,分支至A结点,意思是轮到A猜了;当kmod3=2时,分支至B结点,意思是轮到B猜了;当kmod3=0时,分支至C结点,意思是轮到C猜了。144.A结点有两

14、个分支当b=c时,A=true,即A能

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。