求教c语言问题!!!
警察审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四个人中每人要么是诚实的,要么总是说谎。他们给警察的回答是:
甲说:“ 我没有偷。”
乙说:“ 甲没有偷,是丙偷的。”
丙说:“ 我没有偷,是丁偷的。”
丁说:” 丙没有偷,是乙偷的。”
请编写程序,根据这四个人的回答判断谁是窃贼。
求教c语言问题!!! 警察审问四名窃贼嫌疑犯。已知,这四人当中仅有一名是窃贼,还知道这四个人中每人
答案:2 悬赏:20 手机版
解决时间 2021-03-03 03:00
- 提问者网友:绫月
- 2021-03-02 09:41
最佳答案
- 五星知识达人网友:我住北渡口
- 2021-03-02 11:11
#include<stdio.h>
int main()
{
int x[4]={0};//数组中1表示窃贼,0则不是
int i;
int a,b,c,d;//用于穷举四人所说的真假
for(i=0;i<4;x[i++]=0)
{
x[i]=1;//假定一个人是窃贼
for(a=0;a<2;a++)//穷举每种真假组合
for(b=0;b<2;b++)
for(c=0;c<2;c++)
for(d=0;d<2;d++)
{
if((x[0]==0)==a)//判断是否符合
if((x[0]==0)==b&&(x[2]==1)==b)
if((x[2]==0)==c&&(x[3]==1)==c)
if((x[2]==0)==d&&(x[1]==1)==d)
switch(i)//输出符合的那种假设
{
case 0:printf("甲");break;
case 1:printf("乙");break;
case 2:printf("丙");break;
case 3:printf("丁");break;
}
}
}
return 0;
}
int main()
{
int x[4]={0};//数组中1表示窃贼,0则不是
int i;
int a,b,c,d;//用于穷举四人所说的真假
for(i=0;i<4;x[i++]=0)
{
x[i]=1;//假定一个人是窃贼
for(a=0;a<2;a++)//穷举每种真假组合
for(b=0;b<2;b++)
for(c=0;c<2;c++)
for(d=0;d<2;d++)
{
if((x[0]==0)==a)//判断是否符合
if((x[0]==0)==b&&(x[2]==1)==b)
if((x[2]==0)==c&&(x[3]==1)==c)
if((x[2]==0)==d&&(x[1]==1)==d)
switch(i)//输出符合的那种假设
{
case 0:printf("甲");break;
case 1:printf("乙");break;
case 2:printf("丙");break;
case 3:printf("丁");break;
}
}
}
return 0;
}
全部回答
- 1楼网友:西风乍起
- 2021-03-02 11:54
推理题目,一个一个的去验证,例如:假设甲是窃贼,那么他的话就是假的,乙说的也是假的,那么丙没有偷,丙说的是真的,那么丁偷了,这就矛盾了!
编程的话,将命题改写成符号,例如甲 aa = 0表示甲说甲没有偷。ba=0表示乙说甲没有偷,bc=1表示乙说是丙偷的,若假设a=1,那么ba=0为假,bc=1也为假,那么cc=0为真,cd=1也为真,a=1和d=1冲突就不行。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯