相对复杂,一时间难以分辨他是否撒谎,
稍微简单梳理一下,
蓝衣人其实陈述了两件事,
其一,红衣人喝了假话药水,
其二,蓝衣人不是法师,
并且这两个陈述是选择与排除关系,只能二选一,
所以,
假如蓝衣人说的是真话,就会出现陈述一为真陈述二为假或陈述一为假陈述二为真的两种情况,
如果蓝衣人说的是假话,这会出现陈述一和陈述二同为真或陈述一和陈述二同为假的两种情况,
至此,
相当于布尔代数中的异和运算,也就是数字电子里逻辑运算的基础,
同时在计算机的运行中也会用二进制的0和1代替逻辑上的真和假,
咱们也可以根据现有的信息,用类似的方式分析一下蓝衣人的回答,
假设红衣人喝了假话药水为前提,
如果是“陈述一为真陈述二为假”这种情况,那蓝衣人就是法师,
但这情况必须是在蓝衣人喝了真话药水才能实现,这样就跟黄衣人的回答相矛盾了,所以黄衣人只能说假话,由此可以确定法师喝的是真话药水,
但红衣人那边,他不能说假话,否则蓝衣人就得是喝了假话药水的法师,进而和已知条件不符,也就是可以确定红衣人喝的是真话药水,但这样又会跟之前假设的前提相矛盾!
所以只能是其它可能,
画个表格,
把对应的0和1填上去,
假设红衣人喝的是真话药水,
在蓝衣人陈述一为假的情况下,如果陈述二也为假,那么蓝衣人就是喝了假话药水的法师,这结论同样与已知条件有矛盾;
所以反推,如果陈述二为真,那么就能判定出红衣人和蓝衣人都是喝了真话药水,并且红衣人才是法师,
这样就都能说得通且没有矛盾。。。。。。
好家伙!
感觉脑瓜子有点痒!
很显然,
这次考核涉及到逻辑学的实际应用!
还好咱们在学编程的时候有练过,
这要是根据相应条件弄小程序出来,估计一下子就可以得出正确答案。