警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
代码实现#include猜名次 问题描述int main() { //用数值来表示是否为凶手,如果为凶手则为1,否则为0 int A = 0; int B = 0; int C = 0; int D = 0; //对于每个人来说,就只有两种情况,是凶手或者不是凶手,遍历出所有情况 for (A = 0; A <= 1; A++) { for (B = 0; B <= 1; B++) { for (C = 0; C <= 1; C++) { for (D = 0; D <= 1; D++) { if ((A != 1 || C == 1) && (A != 1 || D == 1) && (A != 1 || D != 1) && (C == 1 || D == 1) && (C == 1 || D != 1) && (D == 1 || D != 1))//最多只有一个人说谎了 { if (!(A != 1 && C == 1 && D == 1 && D != 1))//至少有一个人说谎了 { if (A + B + C + D == 1)//四个人中只有一个凶手 { printf("A=%d B=%d C=%d D=%d ", A, B, C, D); } } } } } } } return 0; }
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
代码实现int main()
{
int player[5] = {0,0,0,0,0};
//遍历所有可能出现的结果
for (player[0] = 1; player[0] <= 5; player[0]++)
{
for (player[1] = 1; player[1] <= 5; player[1]++)
{
for (player[2] = 1; player[2] <= 5; player[2]++)
{
for (player[3] = 1; player[3] <= 5; player[3]++)
{
for (player[4] = 1; player[4] <= 5; player[4]++)
{
if (player[0] != player[1]
&& player[0] != player[2]
&& player[0] != player[3]
&& player[0] != player[4]
&& player[1] != player[2]
&& player[1] != player[3]
&& player[1] != player[4]
&& player[2] != player[3]
&& player[2] != player[4]
&& player[3] != player[4])//每个人的名次都不同
{
if ((player[1] == 2 || player[0] == 3)
&& (player[1] != 2 || player[0] != 3))
{
if ((player[1] == 2 || player[4] == 4)
&& (player[1] != 2 || player[4] != 4))
{
if ((player[2] == 1 || player[3] == 2)
&& (player[2] != 1 || player[3] != 2))
{
if ((player[2] == 5 || player[3] == 3)
&& (player[2] != 5 || player[3] != 3))
{
if ((player[4] == 4 || player[0] == 1)
&& (player[4] != 4 || player[0] != 1))
{
printf("A=%d ", player[0]);
printf("B=%d ", player[1]);
printf("C=%d ", player[2]);
printf("D=%d ", player[3]);
printf("E=%d ", player[4]);
}
}
}
}
}
}
}
}
}
}
}
return 0;
}



