求解一个简单的逻辑题

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

我想的是
设置四个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上看到另外一个人的解答,用公式推出的,彪悍些:
[quote]
不编程行不行?用一对布尔变量来描述一个人的状态 (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

甲是强盗。[/quote]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值