c语言三个人中有一个撒谎,迷语博士的难题

两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替。如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第一句是真是假没有规律。 迷语博士遇到三个人,知道他们分别来自三个不同的民族:诚实族、说谎族和两面族。三人并肩站在博士前面。 博士问左边的人:“中间的人是什么族的?”,左边的人回答:“诚实族的”。 博士问中间的人:“你是什么族的?”,中间的人回答:“两面族的”。 博士问右边的人:“中间的人究竟是什么族的?”,右边的人回答:“说谎族的”。 请问:这三个人都是哪个民族的?

解题时要使用变量将这三个民族分别表示出来

变量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

/**

*

* 迷语博士的难题(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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值