任务和代码
/*
*Copyright (c)2016,CSDN学院 | C语言及程序设计初步
*All rights reserved.
*文件名称:p40-8.c
*作 者:管运煌
*完成日期:2016年6月17日
*警察局抓住了A、B、C、D四名盗窃嫌疑犯,其中只有一人是小偷。
在审问时,A说:“我不是小偷”;B说:“C是小偷”;C说:“小偷肯定是D”;D说:“C在冤枉好人”。
现在已经知道这四人中有三人说的是真话,一人说的是假话。请问到底谁是小偷?
*/
#include <stdio.h>
int main(int argc, char * argv[])
{
<span style="white-space:pre"> </span>int a,b,c,d;
printf ("0代表真话\t1代表假话!\n");
for (a=1;a>=0;a--)
<span style="white-space:pre"> </span>for (b=1;b>=0;b--)
<span style="white-space:pre"> </span>for (c=1;c>=0;c--)
<span style="white-space:pre"> </span>for (d=1;d>=0;d--)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>if ((!a)+(c)+(d)+(!d)==3&&a+b+c+d==1)
<span style="white-space:pre"> </span>printf ("%d %d %d %d ",a,b,c,d);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return 0;
}
运行结果
知识总结
穷举法
心得体会
有点蒙~如果不看提示感觉不知道从哪下手~ 循环每个人说话的真假,直到符合真假判断条件(即”四个人中有一个人说谎“),根据真假来判断,四句话数值的和是3,四个人数值的和为1。