小偷问题

警察局抓了a,b,c,d四名偷窃嫌疑犯,其中只有一人是小偷。审问中
    a说:“我不是小偷。”
    b说:“c是小偷。”
    c说:“小偷肯定是d。”
    d说:“c在冤枉人。”
现在已经知道四个人中三人说的是真话,一人说的是假话,问到底谁是小偷?
问题分析:将a,b,c,d将四个人进行编号,号码分别为1,2,3,4。则问题可用枚举尝试法来解决。

算法设计:用变量x存放小偷的编号,则x的取值范围从1取到4,就假设了他们中的某人是小偷的所有情况。四个人所说的话就可以分别写成: 

   a说的话:x<>1 

   b说的话:x=3 

   c说的话:x=4 

   d说的话:x<>4

  注意:在x的枚举过程中,当这四个逻辑式的值相加等于3时,即表示“四个人中三人说的是真话,一人说的是假话”。 

程序代码:

#include<stdio.h>

void main( )

{ int x;

  for(x=1;x<=4;x++)

   if((x!=1)+(x==3)+(x==4)+(x!=4)==3)

printf("%c is a thief.\n",(64+x));

 }



运行结果:

c  is  a  thief .


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值