int a[4] = {0}; // a[0]:甲;a[1]:乙;a[2]:丙;a[3]:丁
/* 0表示没打碎,1表示打碎:
* 甲说:乙没有打碎,是丁打碎的 -> a[1]+a[3] == 1
* 乙说:我没有打碎,是丙打碎的 -> a[1]+a[2] == 1
* 丙说:甲没有打碎,是乙打碎的 -> a[0]+a[1] == 1
*/
if (a[1]+a[3] == 1 && a[1]+a[2] == 1 && a[0]+a[1] == 1)
为什么上述条件这么写呢?我猜测是因为“4个人中每个人要么是诚实的,要么总是说谎的。”我没看懂这个条件。
此类逻辑推理题,说谎与诚实这个条件是很重要的,由此,我用C语言实现了另一道逻辑推理题,供参考。