• C语言每日一题(10):无人生还


    标头
    无人生还


    • 文章主题:无人生还🔥
    • 所属专栏:C语言每日一题📗
    • 作者简介:每天不定时更新C语言的小白一枚,记录分享自己每天的所思所想😄🎶
    • 个人主页:[₽]的个人主页🏄🌊


    前言

    编程起因

    最近刚刷到过一个有关逻辑判断的猜凶手的题目,于是想着能不能将其带入到无人生还1的背景中去重新设计一下这个题目,增强题目趣味性的同时还能更加好的锻炼我们的编程思维,于是有了这篇文章的设计。

    项目介绍

    情节简介

    士兵岛上现在只剩下了四个人,眼看着桌上的小士兵只剩下了四个,四个人更加的诚惶诚恐,生怕下一个对应童谣死的就是自己,剩下的人分别是维拉教师,隆巴德队长,阿姆斯特朗医生以及布洛尔侦探(这里简用A,B,C,D进行标记)。为了避免单独被杀,四个人聚集在了一起,他们一边互相猜忌,一边讨论谁最有可能伪造了自己独处时的经历,因为这个人要么和欧文先生串通一气,要么就是欧文先生本人。

    讨论内容

    讨论内容简记如下:
    A说:不是我。
    B说:是C。
    C说:是D。
    D说:C在胡说。

    找出凶手

    假设二刷《无人生还》的你依稀记得这四个人中有三个说的是真话一个说的是假话,那么伪造经历的到底是谁呢?请运用编程来查出这个人。


    设计思路

    1.整体逻辑

    方法一

    运用依次假设法以此判断每个人是伪造者时三假一真的条件判断是否为真。

    方法二

    运用逻辑推断法直接得出要么D是伪造者,要么D不是,在依次判断条件,真就是D,假就是C。

    2. 具体逻辑

    方法一

    设置四个变量代表凶手,分别将其赋值为0,从a开始一次通过赋值为1来假设伪造经历的人,在运用分支语句将四句话变成判断语句的形式在相加,如果三真一假成立的话则和为3,判断其和是否为3,若为3,则找出凶手,若不为3,则将a赋值回0洗清a的嫌疑后再继续假设下一个人。

    方法二

    既然四个人说的话中三真一假,仔细观察可知C和D的话互相矛盾,C说D是伪造经历的那个人,D说C说谎,那么只要假设D是否是这个人即可,如果D是时条件判断也是真就是D,反之就是C。


    代码展示

    方法一:依次假设法(最容易想到的方法)

    #include 
    int main()
    {
    	int a = 0, b = 0, c = 0, d = 0;
    	if (a = 1)//假设伪造者是A
    	{
    		if (((a != 1) + (c == 1) + (d == 1) + !(d == 1)) == 3)//判断是否符合三假一真条件
    		{
    			printf("The killer is A.\n");
    		}
    		a = 0;
    	}
    	if (b = 1)
    	{
    		if (((a != 1) + (c == 1) + (d == 1) + !(d == 1)) == 3)
    		{
    			printf("The killer is B.\n");
    		}
    		b = 0;
    	}
    	if (c = 1)
    	{
    		if (((a != 1) + (c == 1) + (d == 1) + !(d == 1)) == 3)
    		{
    			printf("The killer is C.\n");
    		}
    		c = 0;
    	}
    	if (d = 1)
    	{
    		if (((a != 1) + (c == 1) + (d == 1) + !(d == 1)) == 3)
    		{
    			printf("The killer is D.\n");
    		}
    		d = 0;
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    方法二 :逻辑推断法(较容易想到,速度最快,结构最简单)

    #include 
    int main()
    {
    	int a = 0, b = 0, c = 0, d = 0;
    	if (d = 1)//假设伪造者是D
    	{
    		if (((a != 1) + (c == 1) + (d == 1) + !(d == 1)) == 3)//判断是否符合三假一真条件
    		{
    			printf("The killer is D.\n");//是则伪造者是D
    		}
    		else
    		{
    			printf("The killer is C.\n");//不是伪造者只能是C
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    效果展现

    效果展现


    结语

    以上就是我对无人生还这个项目的解题思路,代码以及效果展示,那么你猜到凶手是谁了吗?😄希望对你的C语言学习有所帮助!作为刚学编程的小白,可能在一些设计逻辑方面有些不足,欢迎评论区进行指正!看都看到这了,点个小小的赞或者关注一下吧(当然三连也可以~),你的支持就是博主更新最大的动力!让我们一起成长,共同进步!


    1. 《无人生还》(And Then There Were None,1939年发行时书名为Ten Little Niggers,后改为Ten Little Indians),是英国推理小说作家阿加莎·克里斯蒂创作的长篇小说,出版于1939年。
      该小说讲述了一起发生在荒岛之上的连环谋杀案。《无人生还》融合了犯罪小说之外的故事类型。如文中对不少人物,特别是布伦特小姐和维拉的心理活动有着大段描写,有些段落接近意识流小说的写法。 ↩︎

  • 相关阅读:
    数据结构:顺序表
    js将后端返回的blob请求下载
    C++之互斥锁、读写锁、互斥量、 信号量、原子锁机制总结(二百二十五)
    Linux配置SSH允许TCP转发
    阿里云验证SSL证书
    “我“眼中的测试/开发程序员,预想与现实的碰撞......
    HTML制作一个汽车介绍网站【大学生网页制作期末作业】
    认识Vue
    Linux多线程基础总结
    视觉SLAM笔记四之单目稠密重建
  • 原文地址:https://blog.csdn.net/2303_78612872/article/details/132950494