提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 问题
- 一、思路
- 二、关键代码
- 运行代码
问题
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
一、思路
设0为凶手,1为好人。
提炼:A:A==1;B:C==0;C:D==0;D:D==1.
因3人说的是真的,1人说的是假,在C语言中真为1、假为0;所以4人相加为3.这就是本题关键解题。
二、关键思路
1、使用for嵌套实现A、B、D、E的可能性。(枚举)
for (A = 0; A < 2; A++)
{
for (B = 0; B < 2; B++)
{
for (C = 0; C < 2; C++)
{
for (D = 0; D < 2; D++)
{
}
}
}
}
}
}
2、if嵌套进行筛选
if (((A ==1) + (C == 0) + (D == 0) + (D == 1)) == 3)
{
if ((A + B + C + D) == 3)
{
if (A == 0)
{
printf("A是凶手\n");
}
else if (B == 0)
{
printf("B是凶手\n");
}
else if (C == 0)
{
printf("C是凶手\n");
}
else
{
printf("D是凶手\n");
}
}
}
运行代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//定义0为凶手,1为好人
int A, B, C, D;
for (A = 0; A < 2; A++)
{
for (B = 0; B < 2; B++)
{
for (C = 0; C < 2; C++)
{
for (D = 0; D < 2; D++)
{
if (((A ==1) + (C == 0) + (D == 0) + (D == 1)) == 3)
{
if ((A + B + C + D) == 3)
{
if (A == 0)
{
printf("A是凶手\n");
}
else if (B == 0)
{
printf("B是凶手\n");
}
else if (C == 0)
{
printf("C是凶手\n");
}
else
{
printf("D是凶手\n");
}
}
}
}
}
}
}
return 0;
}