题目描述:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
通过上述问题,你会想到如何验证谁是凶手?用日常惯用的假设法,假如A就是凶手,去代入每个嫌疑犯所说的话,判断是否符合A为凶手时,有三人说了真话,一人说了假话。
所以只需要两个动作:假设+判断
//凶手是谁
int main()
{
char killer = 0;
//假设凶手是A,killer++可以遍历到B,C,D,每个嫌疑犯都被假设一次
for (killer = 'A'; killer <= 'D'; killer++)
{
//代码翻译题目条件,条件为真则为1
if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)
{
printf("凶手是:%c\n", killer);
break;
}
}
return 0;
}
启发:
“磨刀不误砍柴工”,我想,编程就是我们手里的刀,而编程思维是不断的去磨刀。只有想清楚问题要如何一步步拆解,才能更快地去实践代码逻辑。当我们还没拥有砍柴的能力,你要做的就是大量训练编程思维和熟练手里的工具。