浏览 3853 次
锁定老帖子 主题:求解一个简单的逻辑题
精华帖 (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 甲是强盗。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-07-08
甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这2句话互为逻辑反,必有真话,所以其他的都是假话,所以甲是强盗。 编程?都想出来了,编程算什么? |
|
返回顶楼 | |
发表时间:2008-07-17
bcccs 写道 甲说:我不是强盗! ,乙说:丁是强盗,丙说:乙是强盗,丁说:我不是强盗
这2句话互为逻辑反,必有真话,所以其他的都是假话,所以甲是强盗。 编程?都想出来了,编程算什么? 这话说得.. 那我叫你打印一个3X3的正方形. 直接 System.out.println("* * *"); System.out.println("* * *"); System.out.println("* * *"); 不就完了.还用得着绕循环么? |
|
返回顶楼 | |
发表时间:2008-07-18
要求的应该是让程序自己推理吧。一小时能做出来也太牛了吧,化合取范式和归结反演的算法写起来都挺绕的。
|
|
返回顶楼 | |