大家好,本篇文章主要讲的是C语言中的盗贼(小偷)问题详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
问题描述:警察审问4名窃贼嫌疑犯。现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎。
这4个人给警察的回答如下。
甲说:“乙没有偷,是丁偷的。”
乙说:“我没有偷,是丙偷的。”
丙说:“甲没有偷,是乙偷的。”
丁说:“我没有偷。”
请根据这4个人的回答判断谁是窃贼。
分析过程:突破点从丁开始,因为根据丁的回答是无法判断的,而且我们可以发现甲乙丙三人的回答是十分相似的(如果不是ta,就是ta),我们现在先不去考虑甲乙丙谁说谎谁不说谎。我们先把甲乙丙丁设成ABCD,变量为1的是盗贼,那么
甲—B+D==1;
乙—B+C==1;
丙—A+B==1;
丁—A+B+C+D==1;
根据这四个人可以得到这四个条件
假定一个人是盗贼 代入这四个条件中
第一种:
#include <stdio.h>
int main()
{
int A,B,C,D;
for(A=0; A<=1; A++)
for(B=0; B<=1; B++)
for(C=0; C<=1; C++)
for(D=0; D<=1; D++)
{
if(B+D==1&&B+C==1&&A+B==1&&A+B+C+D==1)
if(A)
printf("甲是窃贼\n");
else if(B)
printf("乙是窃贼\n");
else if(C)
printf("丙是窃贼\n");
else
printf("丁是窃贼\n");
}
}
第二种:只用一个for循环就可以了 假定一个人为盗贼代入条件
#include <stdio.h>
int main()
{
int i,A=1,B=0,C=0,D=0;
for(i=0; i<=1; i++)
if(B+D==1&&B+C==1&&A+B==1)
break;
else
{
if(i==1)
{
A=0;
B=1;
}
if(i==2)
{
B=0;
C=1;
}
if(i==3)
{
C=0;
D=1;
}
}
if(i==1)
printf("甲是盗贼");
if(i==2)
printf("乙是盗贼");
if(i==3)
printf("丙是盗贼");
if(i==4)
printf("丁是盗贼");
}
到此这篇关于C语言中的盗贼(小偷)问题详解的文章就介绍到这了,更多相关C语言盗贼问题内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:C语言中的盗贼(小偷)问题详解
基础教程推荐
猜你喜欢
- 详解c# Emit技术 2023-03-25
- 一文带你了解C++中的字符替换方法 2023-07-20
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C/C++编程中const的使用详解 2023-03-26
- C++详细实现完整图书管理功能 2023-04-04
- 如何C++使用模板特化功能 2023-03-05
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C语言 structural body结构体详解用法 2022-12-06
- C利用语言实现数据结构之队列 2022-11-22
- C++中的atoi 函数简介 2023-01-05