编程确定小偷

已知A、B、C、D四个人中有一人是小偷,并且,这四个人中每人要么说真话,要么说假话。在审问过程中,这四个人分别回答如下:
A说:B没有偷,是D偷的。
B说:我没有偷,是C偷的。
C说:A没有偷,是B偷的。
D说:我没有偷。

分析:解题关键在于理解“这四个人中每人要么说真话,要么说假话”这句话。设ABCD分别代表四人,偷了的值是1,没偷值为2。
以A为例,他说了两句话,这两句话要么都是对的,要么都是错的。所以说,如果B偷了(B=1),D一定没有偷(D=0);反之若B没偷(B=0),那么一定是D偷的(D=1)。即B+D=1。
同理可得B+C=1 A+B=1。
对于D,他只说了一句话,所以如果D偷了(D=1)那么(A+B+C=0);如果D没偷(D=0)那么就是甲乙丙三人中某人偷的(A+B+C=1)。即A+B+C+D=1。

分析好后,代码便很好写了。

#include<stdio.h>
int main()
{
	int a,b,c,d;
	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(b+d==1&&b+c==1&&a+b==1&&a+b+c+d==1){
						if(a==1){printf("a是小偷\n");}
						else if(b==1){printf("b是小偷\n");}
						else if(c==1){printf("c是小偷\n");}
						else{printf("d是小偷\n");}
					}
				}
			}
		}
	}
	return 0;
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值