有A,B,C,D,E五个人,每个人的额头上都贴了一张黑色或者白色的纸条,五人对坐,每个人可以看到其他人头上的纸的颜色,但都不知道自己额头上纸的颜色,五人相互观察后:
A说:“我看见有三个人的额头贴的是白纸,一个人是黑纸。”
B说:“我看见其他四个人的额头上贴的是黑纸。”
C说:“我看见有一个人的额头贴的是白纸,三个人是黑纸。”
D说:“我看见其他四个人的额头上贴的是白纸。”
E没发言;
现在已知额头贴黑纸的人说的是谎话,贴白纸的人说的都是实话,求出这五人的头上的贴的都是什么颜色的纸条?
#include<stdio.h>
main()
{
int a,b,c,d,e;
printf("0-黑纸 1-白纸\n");//0代表黑色的纸,1代表白色的纸条
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
for(d=0;d<=1;d++)
for(e=0;e<=1;e++)
if(a&&b+c+d+e==3||!a&&b+c+d+e!=3)//如果a=1,则其说的是真话,!a反之。
if(b&&a+c+d+e==0||!b&&a+c+d+e!=0)
if(c&&b+a+d+e==1||!c&&b+a+d+e!=1)
if(d&&a+b+c+e==4||!d&&a+b+c+e!=4)
{
printf("A is %d\n",a);
printf("B is %d\n",b);
printf("C is %d\n",c);
printf("D is %d\n",d);
printf("E is %d\n",e);
}
}
类似的主要就是把每个人说的话用表达式写出,通过穷举法完成编程!