描述:

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

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

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

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

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

思路及分析:

从来没有做过类似题目的同学第一次看见这道题,可能有点发懵。然后开始考虑假设,排列组合,枚举等等...但是这道题的代码结果会让你大吃一惊。

首先,要考虑的是如何用代码表示A,B,C,D这四个人说的话?我们定义一个char变量killer来表示凶手。最能想到的就是如果某个人说的话是成立的话,将他的结果为1(类似于bool类型),否则就是0。这样的想法是正确的。A说,不是A,那么,可以表示为killer != ‘A’。判断成立的话,他就会返回1,否则,返回0。类似的,其他3个人说的话也可以这样来表示。最后,根据3个人说了真话,1个人说了假话得知返回的总和为3。比如,我们假设A就是凶手,那么根据四个人说的话,A说了假话,B也说了假话,和条件是不符合的。这样之后,只是判断了A的情况,B,C,D的情况还没有判断,只需要加一个循环就可以了。

C语言代码如下:

#include<stdio.h>int main(void)
{char killer = 'A';for (killer = 'A'; killer <= 'D'; killer++){if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3){printf("the killer is %c", killer);}}return 0;
}

结果如下:

现在,我们来看和它相似的第二道题目:

描述:

两个乒乓球队进行比赛,甲队为ABC三人;乙队为XYZ三人;抽签决定比赛名单,有人向队员打听比赛的名单,A说他不和X比,C说他不和Z比。请编程输出所有可能的对阵方案,并统计方案的个数。

思路及分析:

这道题和猜凶手那道题目的方法是一致的,都是直接把题目的文字描述转换为代码描述。直接使用 for循环即可。代码如下:

#include<stdio.h>int main(void)
{char A = 0;char B = 0;char C = 0;for (A = 'X'; A <= 'Z'; A++){for (B = 'X'; B <= 'Z'; B++){for (C = 'X'; C <= 'Z'; C++){if ((A != 'X') + (C != 'Z')  == 2){if (A != B && B != C && C != A){printf("A VS %c, B VS %c, C VS %c\n", A, B, C);}}}}}return 0;
}

结果如下:

第三道题目:

描述:

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

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

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

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

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

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

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

思路及分析:

暴力破解法即可。代码如下:

#include<stdio.h>int main(void)
{int a = 0, b = 0, c = 0, d = 0, e = 0;for (a = 1; a <= 5; a++){for (b = 1; b <= 5; b++){for (c = 1; c <= 5; c++){for (d = 1; d <= 5; d++){for (e = 1; e <= 5; e++){if (((b == 2) + (a == 3) == 1) && //B第二,我第三((b == 2) + (e == 4) == 1) && //我第二,E第四((c == 1) + (d == 2) == 1) && //我第一,D第二((c == 5) + (d == 3) == 1) && //C最后,我第三((e == 4) + (a == 1) == 1))   //我第四,A第一{if (a * b * c * d * e == 120){printf("%d %d %d %d %d\n", a, b, c, d, e);} }}}}}}return 0;
}

总结:

最后一道题目来看,出现了惊人的五个for循环。同时,每一个for循环都是循环5次,时间复杂度达到了O(n * n)。也就是说,一旦要判断的人数增多,计算机的计算速度将会以肉眼可见的速度慢下去。类似的题目采用暴力破解的方法虽然不是最优解,但却是最直观简单,好理解的方法。

C语言 猜凶手及类似题目相关推荐

  1. c语言期末考试压轴编程题——猜凶手、猜名词、喝汽水、水仙花数

    目录 C语言大一期末必考压轴编程题 几道C语言初阶学习必考题,尤其最后一道打印水仙花数,C语言期末考试必备大题,不要错过!!! 以下个人思路仅供参考,如有更优算法,欢迎评论! 目录 一.猜凶手 题目: ...

  2. c语言智力题 操作符详解例题 数据存储 指针初阶 水仙花数 杨辉三角 逆序字符串 喝汽水问题 打印图形 猜凶手 使用指针打印数组内容 调整奇数偶数顺序 运动员猜名次

    [题目名称] 下面代码的结果是:a #include <stdio.h> int i; int main() {i--; //sizeof'的返回值是无符号整型if (i > siz ...

  3. C语言小游戏 - 猜凶手

    猜凶手 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个. 以下为4个嫌疑犯的供词 : A说:不是我. // 说话为真,结果是不是就为1,否则 0 B说:是C. C说:是D. / ...

  4. 【每日一题】——猜凶手

    一.题目描述 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个. 以下为4个嫌疑犯的供词: A说:不是我. B说:是C. C说:是D. D说:C在胡说 已知3个人说了真话,1个人 ...

  5. 你知道猜凶手和猜名次如何利用编程实现吗?

    我们先来看看猜名次的题目: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A选手说:B第二,我第三: B选手说:我第二,E第四: C选手说:我第一,D第二: D选手说:C最后,我第三: ...

  6. 【智力题 01】猜凶手

    @TOC [01 猜凶手] 某地发生了一起凶杀案,警察通过排查确定杀人凶手必为4个嫌疑犯中的一个.以下为4个嫌疑犯的供词: A说:不是我. B说:是C. C说:是D. D说:C在胡说. 已知3个人说了 ...

  7. 【猜凶手,猜名次,杨辉三角】经典小学奥数的代码逻辑是什么?

    众所周知,数学逻辑无孔不入,那么如何结合自己想奥数题的逻辑来编写代码呢 目录 1.猜凶手 2.猜名次 3.杨辉三角 1.猜凶手 题目 A说:不是我. B说:是C. C说:是D. D说:C在胡说 已知3 ...

  8. c语言超级经典400道题目,C语言超级经典400道题目.doc

    C语言超级经典400道题目1.C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符.C.1 2.C语言程序的三种基本结构是____ A.顺序结构,选择结构,循环结构 B.递 ...

  9. C语言编写工资管理系统类似学生管理系统

    C语言编写工资管理系统类似学生管理系统 开始界面和菜单界面B void start() //开始界面 {system("cls");//清屏 system("color ...

最新文章

  1. MySQL乐观锁、共享锁、排他锁、行锁、表锁区别和使用方法
  2. HTML5纯Web前端也能开发直播,不用开发服务器(使用face2face)
  3. 前端模板Nunjucks简介
  4. OpenJudge/Poj 1226 Substrings
  5. jvm gc,gc算法_GC解释:算法
  6. dll侧加载_WORD打开时出现加载DLL错误解决方法
  7. [程序员必备工具]分享一款不错的个人代码个人知识管理软件wiz
  8. 2020年4月中国编程语言排行榜程序员工资统计,人工智能工资大跌
  9. python命令行参数有什么用_一文看懂命令行参数的用法——Python中的getopt神器
  10. 专题_期权交易必备知识
  11. 什么是 “动态规划” , 用两个经典问题举例。
  12. python字符串_Python字符串三种格式化输出
  13. Sping--AOP--XML
  14. 背包问题回溯法c语言程序,C语言回溯法解决背包问题
  15. xci转化nsp_4nxci软件下载[xci游戏转nsp格式工具]v2.10-k73游戏之家
  16. 全球及中国水电行业开发规划及十四五投资战略报告2021年版
  17. Get “https://github.com/electron-userland/electron-builder-binaries/releases/download/appimage-12.0.
  18. 英语基础-动词的分类
  19. Blender 制作一个简单的圆形
  20. 专家:闽新增11家A级物流企业多受益“信息快车”

热门文章

  1. 浪潮发布新型水冷服务器 可以快装移动式液冷集群
  2. 高阶人生从在职读研开始——中国社科院与美国杜兰大学金融管理硕士
  3. 使用主从盘互备做服务器
  4. teamviewer锁定计算机密码,Team Viewer设置固定密码远程访问控制,不使用随机密码...
  5. 高德地图web端接入
  6. 计算机网络版本变动,云顶之弈9.15版本变动讲解 如何因对新版本节奏
  7. 【C51单片机】抽号摇奖机设计(仿真)
  8. 一般情况下 服务器内存越多性能越好,服务器一般内存多大合适
  9. 全面屏手机的适配方案
  10. wsus服务器修改同步服务器地址,同步WSUS服务器的方法