小偷问题

来源:互联网 发布:windows phone账号忘了 编辑:程序博客网 时间:2024/04/30 01:57

警察局抓了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 .