题目如:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
代码思路:首先创建一个字符变量murderer表示凶手,让其从A到D遍历。然后将四个人的供词用表达式写出来,相加,放入if语句的判断条件中,三真一假(即为3)。能满足条件进入if语句的murderer即为凶手。
A的供词:murderer != ‘A’;
B的供词:murderer == ‘C’;
C的供词:murderer == ‘D’;
D的供词:murderer != ‘D’;
题二5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
代码思路:与上个问题类似,先创建5个整形变量a、b、c、d、e表示五位运动员A、B、C、D、E的名次。再将它们依次从第一名~第五名(即1到5)遍历。然后将5名运动员的预测结果用表达式写出来,放入if语句的判断条件中去。能满足条件进入if语句的a、b、c、d、e就是正确排名
注意:这里除了运动员的预测结果,还有一个隐含条件:五名运动员的名次各不相同,分别为1、2、3、4、5
由于每位选手都只说对了一半,因此每位选手预测的两个名次中一个为真,一个为假。表达式相加为1:
A:(b == 2) + (a == 3) == 1
B:(b == 2) + (e == 4) == 1
C:(c == 1) + (d == 2) == 1
D:(c == 5) + (d == 3) == 1
E:(e == 4) + (a == 1) == 1
隐含条件:
a * b * c * d * e == 120(注意:不能表示为a+b+c+d+e==15,当他们的和为15时也可能名次重复,例如:1、2、2、5、5)