啊我摔倒了..有没有人扶我起来学习....
@TOC
题目
问:
警察通过排查确定杀人凶手必为4
个嫌疑犯的一个
以下为4
个嫌疑犯的供词:
A
说:不是我
B
说:是C
C
说:是D
D
说:C
在胡说
已知3
个人说了真话,1
个人说的是假话
现在请根据这些信息,写一个程序来确定到底谁是凶手
输入描述:
无
输出描述:
输出为一行
解法
1. 确定思路
- 首先,我们观察到凶手名都是字符型,而且
ASCII
码值是连续的 - 根据猜运动员名次的那题,再根据这题“已知
3
个人说了真话,1
个人说的是假话”,我们想到再次用1
为真,0
为假的方法,把凶手说的话的真假情况直接相加 - 咱们就根据每个凶手说的话翻译成代码试试看
2. 编写代码
- 根据上述思路,观察到凶手名都是字符型,而且
ASCII
码值是连续的,我们定义一个字符型变量killer
来表示凶手,用来储存每个凶手的名字,再构造一个循环
对应代码:
for (killer = 'A'; killer <= 'D'; killer++)
{
//......
}
- 然后根据 ==“已知
3
个人说了真话,1
个人说的是假话”,我们想到再次用1
为真,0
为假的方法,把凶手说的话的真假情况直接相加==来构造判断条件
对应代码:
if ((killer != 'A') + (killer == 'C')+ (killer == 'D') + (killer != 'D') == 3)
{
printf("凶手是%c\n", killer);
}
整体代码就是:
#include<stdio.h>
//猜凶手
int main()
{
int killer = 0;
for (killer = 'A'; killer <= 'D'; killer++)
{
if ((killer != 'A') + (killer == 'C')
+ (killer == 'D') + (killer != 'D') == 3)
{
printf("凶手是%c\n", killer);
}
}
return 0;
}
- 看看输出结果怎么样:
- 想要验证该结果,其实可以使用假设法,假设其中一个是凶手,再用这个条件(“已知
3
个人说了真话,1
个人说的是假话”)来判断