猜凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词 : A说:不是我。 // 说话为真,结果是不是就为1,否则 0 B说:是C。 C说:是D。 //D说:C在胡说 已知3个人说了真话,1个人说的是假话。// 也就是说以上四个条件,有三个条件为真,一个为假
我们来先理一下逻辑
//凶手无非就是4人中的一个 //假设 A 是凶手:A假话,B假话,因为只有1个人说假话,那么 A 肯定不是凶手 //假设 B 是凶手, A真话,B假话,C假话,所以 B 不是凶手 //假设 C 是凶手, A真话,B真话,C假话,D真话,那么 C 满足条件,肯定是凶手 //假设 D 是凶手, A真话, B假话,C真话,D假话,所以 D 不是凶手 #include<stdio.h> int main() { int killer = 0; for (killer = ‘A’; killer <= ‘D’; killer++)//假设凶手,遍历4人 { if ( (killer != ‘A’) // A说:不是我 +(killer == ‘C’) // B说:是C +(killer == ‘D’) // C说:是D +(killer != ‘D’)// //D说:C在胡说 ( 不是我 ) == 3 // 判断是否满足3个人说真话的条件 ) printf("%c\n", killer); // 满足条件,我们就把凶手打印出来 } return 0; }
|