论坛首页 综合技术论坛

求解一个简单的逻辑题

浏览 3850 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-08  
引用
逻辑题:请编程实现,时间一小时。
某天!一家珠宝公司被盗!警方怀疑是甲,乙,丙,丁四个人中的一个,因此对四人进行问话。
甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这四个人中只有一人说的是真话。请问谁是强盗!?


我想的是
设置四个bool变量,分别为A,B,C,D
为true表示其为强盗,为false表示不是强盗
其中只有一个为true,三个为假
将四个人的话语分别转换成逻辑语句:
甲说:我不是强盗! 表达式x A == false
乙说:丁是强盗     表达式y  D == true
丙说:乙是强盗     表达式z  B == true 
丁说:我不是强盗   表达式w  D == false
由于四个人只有一个是真话,也就是说,这四个表达式xyzw,也只有一个为true
由于表达式y与w完全相反,因此必有一个为真
因此表达式 x,z 必定都为假
也就是说 A == true, B == false
甲为强盗


在ChinaUnix上看到另外一个人的解答,用公式推出的,彪悍些:
引用

不编程行不行?用一对布尔变量来描述一个人的状态 (v0, v1),  v0=0 表示说假话,1 真话;v1=0 表示非强盗,v1=1 表示强盗。

按我对题目的理解,强盗只有一人,说真话的也只有一人。设甲乙丙丁分别为 x,y,z,w,有:

x1=x0+1
w1=w0+1
w1=y0
y1=z0

把中间两个式子一加得到 w0+y0+1=0, 所以 w0,y0 中有一个是 1, 另一个是 0;
但 x0,y0,z0, w0 中只有一个 1, 所以 x0=z0=0;
由第一个式子可知道 x1=1

甲是强盗。

   发表时间:2008-07-08  
甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这2句话互为逻辑反,必有真话,所以其他的都是假话,所以甲是强盗。
编程?都想出来了,编程算什么?
0 请登录后投票
   发表时间:2008-07-17  
bcccs 写道
甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这2句话互为逻辑反,必有真话,所以其他的都是假话,所以甲是强盗。
编程?都想出来了,编程算什么?

这话说得..
那我叫你打印一个3X3的正方形.
直接
System.out.println("* * *");
System.out.println("* * *");
System.out.println("* * *");

不就完了.还用得着绕循环么?
0 请登录后投票
   发表时间:2008-07-18  
要求的应该是让程序自己推理吧。一小时能做出来也太牛了吧,化合取范式和归结反演的算法写起来都挺绕的。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics