聪明的学生

      一个教授逻辑学的教授有三个非常善于推理且精于心算的学生A,B,C。有一

天,教授给他们三人出了一道题:教授在每个人脑门上贴了一张纸,并告诉他们

,每个人的字条上面写了一个正整数,且某两个数的和等于第三个。同时,每个

学生都能看见另外两个学生头上的整数,却看不见自己的数。
      这时,教授先对A学生发问:“你能猜出自己的数么?”A回答:“不能。"

教授转身问B:“你能猜出自己的数么?”B想了想也回答:“不能。”教授再问C

学生同样的问题,C思考了片刻,摇了摇头:“不能。”接着,教授又问A,再问B

和C,......经过若干论的提问后,当教授再次询问某人时,此人露出了得意的笑

容,把贴在自己头上的那个数准确无误的报了出来。
      现在,如果告诉你:教授在N次提问后,回答问题的那个人猜出自己头上的

那个数是M,你能推断出两外两个学生的头上贴的是什么数么?
      提示:总是头上贴着最大数的那个人最先猜出自己头上的数。


分析:
     每个人判断的依据是另外两个人头上的数以及大家对教师提问所作出的否定

回答。并且,当一个学生看到另外两个学生头上的数时,他就知道自己的数只有

两种可能,两数之差或者两数之和。否定其中的一个答案,那另一个就是正确的

答案。因为数为正整数,若某个学生看到另外两个学生头上的数相等时,那他立

刻就能判断出自己的数是另外两个数的和。
     举个例子:当N=5,M=8时,有一个可能的情况是A,B,C三人头上的数分别为2

,8,6。B怎么样猜出自己的数的呢?他是这样想的:
     B看到A的是2,看到C的是6,因此B的数为4或者8,假设B的数为4,那么当教

授第三次提问C回答时,C就能猜出自己的数。因为A为2,B为4,那么C不可能为2

,因为C为2,那么B就在教授第二次提问B时,B能回答出自己是4。然而,C没有能

够知道自己的数,所以,B的假设是错误的,即B的值为8。

     现在,实际上能够解决这样一个问题:
     已知,A,B,C三人头上的数位X1,X2,X3,求教授至少提问多少次,轮到回答的

那个人能猜出自己头上的数?
     分析下这个问题。当X1,X2,X3给出时,谁先猜出就确定了。(最大的那个数

的人先猜出),不妨假设X2=X1+X3,那么B作出判断的依据是排除了X2=|X1-X3|的

可能解,即排除X1=X3或者在X2=|X1-X3|的前提下,A,C能够在B之前判断出自己为

最大的那个数。而实际上,A,C并没有猜出。此时,我们把后一种可能转化成排除

在X1,|X1-X3|,X3的情况下,A,C能够猜出谁最大,而该问题就是大问题要求解的

子问题。这就变成了一个递归求解的过程。
     设函数Times(i,j,ti,t2,t3)表示编号为t1的人头上的数是i,编号为t2人头

上的数是j,编号是t3人头上的数是i+j时教授需要提问的次数,而P(t1,t2)表示

教授按照1,2,3的顺序从t1问到t2需要提问的最少次数。则有下列关系:
                                     t3     i=j
     Times(i,j,ti,t2,t3)=    Times(j,i-j,t2,t3,t1)+P(t1,t3)  i>j
                                     Times(i,j-i,t1,t3,t2)+P(t2,t3)  i<j

PS:次数怎么算没有弄明白。

根据网络搜索结果,"聪明格C"可能与以下内容相关: 1. **聪明格游戏**:聪明格(KenKen)是一种数学逻辑游戏,类似于数独,但加入了算术运算规则。玩家需要在一个网格中填入数字,使得每一行和每一列的数字不重复,同时每个“笼子”(由粗线围出的区域)内的数字经过指定的算术运算后得出给定的结果。例如,在一个 $3 \times 3$ 的聪明格游戏中,数字范围是 1 到 3。 2. **编程实现聪明格求解器**:可以通过编程方式实现聪明格游戏的自动求解。例如,使用回溯算法(Backtracking)来尝试所有可能的数字组合,直到找到满足所有条件的解。以下是一个简单的 Python 代码示例: ```python def solve_kenken(grid, cages): empty_cell = find_empty(grid) if not empty_cell: return True # 所有空格已填满,解出成功 row, col = empty_cell for num in range(1, len(grid) + 1): if is_valid(grid, row, col, num, cages): grid[row][col] = num if solve_kenken(grid, cages): return True grid[row][col] = 0 # 回溯 return False def is_valid(grid, row, col, num, cages): # 检查行和列是否有重复数字 for i in range(len(grid)): if grid[row][i] == num or grid[i][col] == num: return False # 检查所属笼子是否满足算术条件 for cage in cages: if (row, col) in cage['cells']: # 实现具体算术验证逻辑 pass return True def find_empty(grid): for i in range(len(grid)): for j in range(len(grid)): if grid[i][j] == 0: return (i, j) return None ``` 3. **聪明格与计算机科学教育**:聪明格游戏常用于计算机科学和数学教育中,帮助学生提高逻辑思维和算法设计能力。它涉及回溯算法、约束满足问题(CSP)等概念,适合用于教学项目或编程练习。 4. **聪明格的变体**:聪明格有多种变体,包括不同大小的网格(如 $4 \times 4$、$5 \times 5$ 等),以及不同的算术运算(加法、减法、乘法、除法)。某些变体还允许使用非连续数字(如 0、2、3 等),增加了游戏的复杂性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值