`
kofsky
  • 浏览: 196737 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

求解一个简单的逻辑题

阅读更多
引用
逻辑题:请编程实现,时间一小时。
某天!一家珠宝公司被盗!警方怀疑是甲,乙,丙,丁四个人中的一个,因此对四人进行问话。
甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这四个人中只有一人说的是真话。请问谁是强盗!?


我想的是
设置四个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

甲是强盗。

分享到:
评论
4 楼 ibio 2009-04-23  
呵呵。强悍,顶!~
3 楼 shellkk 2008-07-18  
要求的应该是让程序自己推理吧。一小时能做出来也太牛了吧,化合取范式和归结反演的算法写起来都挺绕的。
2 楼 ham 2008-07-17  
bcccs 写道
甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这2句话互为逻辑反,必有真话,所以其他的都是假话,所以甲是强盗。
编程?都想出来了,编程算什么?

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

不就完了.还用得着绕循环么?
1 楼 bcccs 2008-07-08  
甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这2句话互为逻辑反,必有真话,所以其他的都是假话,所以甲是强盗。
编程?都想出来了,编程算什么?

相关推荐

Global site tag (gtag.js) - Google Analytics