两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替。如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第一句是真是假没有规律。 迷语博士遇到三个人,知道他们分别来自三个不同的民族:诚实族、说谎族和两面族。三人并肩站在博士前面。 博士问左边的人:“中间的人是什么族的?”,左边的人回答:“诚实族的”。 博士问中间的人:“你是什么族的?”,中间的人回答:“两面族的”。 博士问右边的人:“中间的人究竟是什么族的?”,右边的人回答:“说谎族的”。 请问:这三个人都是哪个民族的?
解题时要使用变量将这三个民族分别表示出来
变量A=1,表示:左边的人是诚实族的
变量B=1,表示:中间的人是诚实族的
变量C=1,表示:右边的人是诚实族的
变量AA=1表示:左边的人是两面族的
变量BB=1表示:中间的人是两面族的
变量CC=1表示:右边的人是两面族的
则左边的人是说谎族的可以表示为:A!=1且AA!=1 用C语言表示为!A&&!AA
则中间的人是说谎族的可以表示为:B!=1且BB!=1 用C语言表示为!B&&!BB
则右边的人是说谎族的可以表示为:C!=1且CC!=1 用C语言表示为!C&&!CC
则左边的人是说谎族的可以表示为:A!=1且AA!=1 用C语言表示为!A&&!AA
则中间的人是说谎族的可以表示为:B!=1且BB!=1 用C语言表示为!B&&!BB
则右边的人是说谎族的可以表示为:C!=1且CC!=1 用C语言表示为!C&&!CC
根据三个人来自三个民族的条件可知: a+aa!=2 && b+bb!=2 && c+cc!=2 且a+b+c ==1 && a+b+c ==1
由左人回答推出:a && !aa && b && !bb || !a && !b
1、左边是诚实族,中间是诚实族
2、左边是说慌族,中间是说谎族
有中间人回答推出:!b
1、中间人不是诚实族
由右人回答推出:c && !b && !bb || (!c && !cc) && (b || bb) || !c && cc
1、右边是诚实族,中间的是说谎族
2、右边是说谎族,中间是诚实族或者两面族 3、右边是两面族
#include<stdio.h>
/**
*
* 迷语博士的难题(2) 两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替。
* 如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第一句是真是假没有规律。
迷语博士遇到三个人,知道他们分别来自三个不同的民族:诚实族、说谎族和两面族。三人并肩站在博士前面。
博士问左边的人:“中间的人是什么族的?”,左边的人回答:“诚实族的”。
博士问中间的人:“你是什么族的?”,中间的人回答:“两面族的”。
博士问右边的人:“中间的人究竟是什么族的?”,右边的人回答:“说谎族的”。
请问:这三个人都是哪个民族的?
解题时要使用变量将这三个民族分别表示出来
变量A=1,表示:左边的人是诚实族的
变量B=1,表示:中间的人是诚实族的
变量C=1,表示:右边的人是诚实族的
变量AA=1表示:左边的人是两面族的
变量BB=1表示:中间的人是两面族的
变量CC=1表示:右边的人是两面族的
则左边的人是说谎族的可以表示为:A!=1且AA!=1 用C语言表示为!A&&!AA
则中间的人是说谎族的可以表示为:B!=1且BB!=1 用C语言表示为!B&&!BB
则右边的人是说谎族的可以表示为:C!=1且CC!=1 用C语言表示为!C&&!CC
根据三个人来自三个民族的条件可知:
a+aa!=2 && b+bb!=2 && c+cc!=2 且a+b+c ==1 && a+b+c ==1
由左人回答推出:a && !aa && b && !bb || !a && !b
1、左边是诚实族,中间是诚实族
2、左边是说慌族,中间是说谎族
有中间人回答推出:!b
1、中间人不是诚实族
由右人回答推出:c && !b && !bb || (!c && !cc) && (b || bb) || !c && cc
1、右边是诚实族,中间的是说谎族
2、右边是说谎族,中间是诚实族或者两面族
3、右边是两面族
* @return
*/
int main()
{
int a;
int b;
int c;
int aa;
int bb;
int cc;
for(a = 0;a <= 1;a++)
{
for(b = 0;b <= 1;b++)
{
for(c = 0;c <= 1;c++)
{
for(aa = 0;aa <= 1;aa++)
{
for(bb = 0;bb <= 1;bb++)
{
for(cc = 0;cc <= 1;cc++)
{
if(a + aa != 2 && b + bb != 2 && c + cc != 2 &&
a + b + c == 1 && aa + bb + cc == 1 &&
(a && !aa && b && !bb || !a && !b) &&
!b &&
(c && !b && !bb || (!c && !cc) && (b || bb) || !c && cc))
{
printf("The man stand on left is a %s. \n",
aa ? "double-dealer" : (a ? "honest" : "lier"));
printf("The man stand on center is a %s. \n",
bb ? "double-dealer" : (b ? "honest" : "lier"));
printf("The man stand on right is a %s. \n",
cc ? "double-dealer" : (c ? "honest" : "lier"));
}
}
}
}
}
}
}
return 0;
}