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

简介: 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)//按照题目要求,最后相加为3
      printf("凶手就是%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;
}

灵魂总结:

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

相关文章
|
4月前
|
前端开发 C语言
C语言06-HelloWorld执行流程分析
C语言06-HelloWorld执行流程分析
C语言06-HelloWorld执行流程分析
|
3月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
2月前
|
C语言
C语言判断逻辑的高阶用法
在C语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
222 88
|
28天前
|
编译器 C语言 C++
【C语言】精妙运用内存函数:深入底层逻辑的探索
【C语言】精妙运用内存函数:深入底层逻辑的探索
|
3月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
3月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
|
5月前
|
C语言
C语言逻辑操作符的短路问题
C语言逻辑操作符的短路问题
|
5月前
|
程序员 C语言 C++
【C语言基础】:动态内存管理(含经典笔试题分析)-2
【C语言基础】:动态内存管理(含经典笔试题分析)
|
5月前
|
程序员 编译器 C语言
【C语言基础】:动态内存管理(含经典笔试题分析)-1
【C语言基础】:动态内存管理(含经典笔试题分析)
|
5月前
|
编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
44 3