C语言解决逻辑分析题(猜凶手)(猜名次)

编程入门 行业动态 更新时间:2024-10-07 20:35:23

C语言解决逻辑分析题(猜<a href=https://www.elefans.com/category/jswz/34/1293058.html style=凶手)(猜名次)"/>

C语言解决逻辑分析题(猜凶手)(猜名次)

前言:

本文介绍如何去解决逻辑分析题的大致思路。

题目一:

猜凶手

题干:

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

现在请根据这些信息,写一个程序来确定到底谁是凶手。

思路:

这是一道典型的逻辑分析题,我们可以循环遍历4种情况(分别当A、B、C、D各为凶手时),然后由已知3个人说了假话,1个人说的是真话来判定最后谁是凶手。

代码:

int main()
{//假设凶手就是a,遍历循环for (char a='a';a<='d'; a++){if ((a != 'a') + (a == 'c') + (a == 'd') + (a != 'd') == 3)//按照题目要求,最后相加为3printf("凶手就是%c", a);}return 0;
}

题目二:

题干:

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

A选手说:B第二,我第三;

B选手说:我第二,E第四;

C选手说:我第一,D第二;

D选手说:C最后,我第三;

E选手说:我第四,A第一;

比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

思路:

考虑到一共五个人,直接模拟推理有些太难,计算机最擅长的遍历此时就会派上用场,将每个人从第1到第5来一遍,则一共会产生5^5种可能性,这个只需要一个5层循环即可搞定。但是这样会导致一些不期望出现的结果出现,所以最后加一个限制条件即可

代码:

//猜名次
int main()
{for (int a=1;a<=5;a++){for (int b=1;b<=5;b++){for (int c=1;c<=5;c++){for (int d=1;d<=5;d++){for (int e=1;e<=5;e++){if ((b == 2) + (a == 3) == 1 &&(b == 2) + (e == 4) == 1 &&(c == 1) + (d == 2) == 1 &&(c == 5) + (d == 3) == 1 &&(e == 4) + (a == 1) == 1){if (a * b * c * d * e == 120)printf("a=%d b=%d c=%d d=%d e=%d", a, b, c, d, e);}}}}}}return 0;
}

灵魂总结:

以后再遇到这类逻辑分析题,我们可以尝试用遍历循环来解决,这种方法最大难点在于如何写出遍历循环的条件。

更多推荐

C语言解决逻辑分析题(猜凶手)(猜名次)

本文发布于:2023-11-16 11:43:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1620537.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:凶手   名次   逻辑   分析题   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!