返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言猜凶手及类似题目的实现示例
  • 515
分享到

C语言猜凶手及类似题目的实现示例

2024-04-02 19:04:59 515人浏览 安东尼
摘要

目录描述:思路及分析:现在,我们来看和它相似的第二道题目:描述:思路及分析:第三道题目:描述:思路及分析:总结:描述: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑

描述:

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为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语言猜凶手及类似题目的实现示例的文章就介绍到这了,更多相关C语言猜凶手内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言猜凶手及类似题目的实现示例

本文链接: https://lsjlt.com/news/161977.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言猜凶手及类似题目的实现示例
    目录描述:思路及分析:现在,我们来看和它相似的第二道题目:描述:思路及分析:第三道题目:描述:思路及分析:总结:描述: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑...
    99+
    2024-04-02
  • 如何进行C语言猜凶手及类似题目的实现
    这期内容当中小编将会给大家带来有关如何进行C语言猜凶手及类似题目的实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。描述:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个...
    99+
    2023-06-26
  • C语言实现猜数字小游戏的示例代码
    目录一、猜数字小游戏1.演示效果2.完整代码二、代码解析1.游戏主体函数2.菜单函数3.头文件以及主函数一、猜数字小游戏 使用循环语句、分支语句和函数实现,游戏内容为输入0~100之...
    99+
    2022-11-13
    C语言猜数字游戏 C语言猜数字 C语言 游戏
  • C语言如何写类实现教程示例
    目录引言操空MYSQL的C程序定义个 联合体+结构体 类型 Parameter引言 以前用C++BUILDER  写类非常爽. 类把涉及数据相关的操作打...
    99+
    2023-05-17
    C语言如何写类 C语言
  • C语言实现手写红黑树的示例代码
    目录前沿红黑树代码测试前沿 写C的红黑树前建议先看我博客这篇文章Java-红黑树 主要看原理 红黑树代码 #ifndef STUDY_RBTREE_H #define ...
    99+
    2024-04-02
  • C语言完数的实现示例
    C语言中的完数指的是一个正整数,它的所有因子(除了它本身)的和等于它本身。例如,6 就是一个完数,因为 6 的因子包括 1、2、3,它们的和恰好等于 6。 在 C语言中,判断一个数是...
    99+
    2023-05-20
    C语言完数
  • PHP怎么实现类似于C语言的文件读取及解析功能
    这篇文章主要介绍了PHP怎么实现类似于C语言的文件读取及解析功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP怎么实现类似于C语言的文件读取及解析功能文章都会有所收获,下面我们一起来看看吧。具体如下:$l...
    99+
    2023-06-08
  • C语言实现手写Map(全功能)的示例代码
    目录为啥需要Map结构主流Map结构数组+链表的Map结构hash函数创建Map集合扩容基数扩容Map集合给Map集合添加元素打印Map集合获取Map集合中的指定元素判断键是否存在判...
    99+
    2024-04-02
  • C语言实现栈的示例详解
    目录前言一. 什么是栈二. 使用什么来实现栈三. 栈的实现3.1 头文件3.2 函数实现3.3 完整代码四. 栈的用处前言 前一段时间,我们试着用C语言实现了数据结构中的顺序表,单链...
    99+
    2024-04-02
  • C语言圣诞树的实现示例
    你们要的圣诞树它来啦! 快去送给心爱的人吧! 效果如下: #define _CRT_SECURE_NO_WARNINGS 1 #include <math.h> #...
    99+
    2024-04-02
  • C语言实现栈的示例代码
    目录一、了解栈的结构特点二、具体实现补充 栈的用处一、了解栈的结构特点 栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。 压栈:栈的插入操作叫做进栈/压...
    99+
    2024-04-02
  • C#WinForm实现多语言切换的示例
    因项目需要,所以在网上找了一些方法实现了该功能,本文也是做一个总结和记录。使用resx文件实现Winform多语言切换,以实现简体中文、英文、泰语的切换为例。如果后续需要增加其它语言...
    99+
    2023-01-30
    C# WinForm多语言切换 C# 多语言切换
  • C语言实现阶乘的示例详解
    目录前言1.阶乘实现1.1理论步骤1.2实践结果2.连续乘层相加实现2.1理论步骤2.2实践结果前言 在现实中,我们做数学题总会遇到阶乘问题,这在计算机中也不例外。 那我们应该怎么实...
    99+
    2024-04-02
  • C语言实现队列的示例详解
    目录前言一. 什么是队列二. 使用什么来实现栈三. 队列的实现3.1头文件3.2 函数的实现四.完整代码前言 前一段时间,我们试着用C语言实现了数据结构中的顺序表,单链表,双向循环链...
    99+
    2024-04-02
  • C语言模拟实现memmove的示例代码
    目录前言例子memmove的模拟实现具体实现步骤总结前言 上一篇我们介绍了memcpy和strcpy的区别,以及memcpy模拟实现,但这两个库函数都有一个缺点,那就是不能自己复制自...
    99+
    2022-12-29
    C语言实现memmove C语言 memmove
  • C语言实现大顶堆的示例代码
    目录堆的实现1.堆结构2.堆的种类3.大顶堆代码实现堆的实现 1.堆结构 逻辑结构上类似于 一棵 “树” 2.堆的种类 大顶堆结构: 一种特殊的树:其每个...
    99+
    2024-04-02
  • C语言实现通讯录的示例代码
    目录一、Contact.h文件二、Contact.c文件三、test.c文件一、Contact.h文件 包含函数的声明 #pragma once #define _CRT_SECUR...
    99+
    2022-11-13
    C语言实现通讯录 C语言 通讯录
  • C语言实现手写字符串处理工具的示例代码
    目录头文件实现文件头文件 #ifndef STUDY_STR_UTIL_H #define STUDY_STR_UTIL_H #include "../structure/cha...
    99+
    2024-04-02
  • c语言枚举类型enum的用法及应用实例
    目录前言一、枚举的概念二、枚举的几种用法1.直接定义枚举值,然后给普通变量赋值。2.定义带名称的枚举三、定义枚举别名四、枚举有什么用,用在哪里?最后总结:前言 今天跟大家讲一下我在产...
    99+
    2024-04-02
  • 基于HTML5实现类似微信手机摇一摇功能的示例分析
    小编给大家分享一下基于HTML5实现类似微信手机摇一摇功能的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作