【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】

这篇具有很好参考价值的文章主要介绍了【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

猜名次问题

典例题目

题目分析:

代码实现:

运行结果:

猜凶手问题 

典例题目

题目分析

代码实现:

运行结果:


猜名次问题

典例题目

猜名次:
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
 


题目分析:

暴力求解:

直接用5层for循环遍历;

两条件:

条件1:A,B,C,D,E选手每个人只能有一个名次,可以知道他们的名次乘积为1*2*3*4*5=120;

注意:这里用A+B+C+D+E=15是不行的;如果是相加等于15,选手的名次重复的时候也可以满足这个条件,所以不可取:

条件2:由题目可知,每个选手都说对了一半;C语言中,如果条件为真结果为1,为假即为0;

所以第二个条件可以用这个性质得出:(A==3)+(B==2)==1&&    
                                                             (B==2)+(E==4)==1&&
                                                             (C==1)+(D==2)==1&&
                                                             (C==5)+(D==3)==1&&
                                                             (E==4)+(A==1)==1


代码实现:

int main()
{
	printf("ABCDE的名次依次为:\n");
	int A, B, C, D, E;
	for (A = 1; A < 6; A++)
	{
		for (B = 1; B < 6; B++)
		{
			for (C = 1; C < 6; C++)
			{
				for (D = 1; D < 6; D++)
				{
					for (E = 1; E < 6; E++)
					{
						if((A==3)+(B==2)==1&&	
						   (B==2)+(E==4)==1&&
						   (C==1)+(D==2)==1&&
						   (C==5)+(D==3)==1&&
						   (E==4)+(A==1)==1&&
						   A*B*C*D*E==120)
						{
						printf("%d %d %d %d %d", A, B, C, D, E);
						}
					}
				}
			}
		}
	}
	return 0;
}

运行结果:

【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】



猜凶手问题 

典例题目

猜凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。


题目分析

这题和猜名次问题非常相似,所以我们可以用猜名次的思想一样解决

因为猜名次问题A,B,C,D,E都是等于某个名次,都是数

1.所以我们这里规定如果是凶手就为1,不是就为0;

2.这里有4个人,所以用4层for循环

3.两个条件:

条件1:因为他们当中只有一个人说了假话,所以类似猜名次问题,条件可改为

(((A != 1) + (C == 1) + (D == 1) + (D != 1) == 3) && (A + B + C + D == 1))

条件2:因为凶手只有一个,只有一个为1,所以条件可以是:

A+B+C+D==1

4.最后再判断谁是1,如果是1就打印谁的名字


代码实现:

int main()
{
	int A, B, C, D;
	for (A=0;A<2;A++)
	{
		for (B = 0; B < 2; B++)
		{
			for (C = 0; C < 2; C++)
			{
				for (D = 0; D < 2; D++)
				{
					if (((A != 1) + (C == 1) + (D == 1) + (D != 1) == 3) && (A + B + C + D == 1))
					{
						if (A == 1)
						{
							printf("凶手是A\n");
						}
						if (B == 1)
						{
							printf("凶手是B\n");
						}
						if (C == 1)
						{
							printf("凶手是C\n");
						}
						if (D == 1)
						{
							printf("凶手是D\n");
						}
					}
				}
			
			}
		}
	}
	return 0;
}

运行结果:

【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】文章来源地址https://www.toymoban.com/news/detail-468696.html


到了这里,关于【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数学建模】离散模型(循环比赛的名次)

    问题描述 若干支球队参加单循环比赛,各队两两交锋,假设每场比赛只计胜负,不计比分,且不允许平局。在循环赛结束后怎样根据他们的比赛结果排列名次呢? 一种表述比赛结果的办法是,用图的顶点表示球队,用连接两个顶点的、有方向的边表示两支球队的比赛结果,

    2024年02月08日
    浏览(60)
  • C语言刷题----循环输出图形

    从12月开始,阿崽就没更新啦,阿崽刷了一波题 接下来的一段时间,准备更新我的刷题的文,有的题有不同思路,欢迎各位宝子和我一起交流 牛客网-----循环输出图形 BC98 线段图案 BC99 正方形图案 BC100 直角三角形图案 BC101 翻转直角三角形图案 BC102 带空格直角三角形图案 BC10

    2024年02月03日
    浏览(34)
  • C语言-每日刷题练习

      小明正在玩一个“翻硬币”的游戏。 桌上放着排成一排的若干硬币。我们用  *  表示正面,用  o  表示反面(是小写字母,不是零),比如可能情形是  **oo***oooo ,如果同时翻转左边的两个硬币,则变为  oooo***oooo 。现在小明的问题是:如果已知了初始状态和要达到的目

    2024年02月05日
    浏览(35)
  • 【C语言】数组和指针刷题练习

    指针和数组我们已经学习的差不多了,今天就为大家分享一些指针和数组的常见练习题,还包含许多经典面试题哦! 一、求数组长度和大小 普通一维数组 字符数组 字符串数组 指向字符串的字符指针 二维数组 总节: 数组名的意义: sizeof(数组名),这里的数组名表示整个数

    2024年02月07日
    浏览(41)
  • 【C语言编程之旅 6】刷题篇-for循环

    思路: 两个循环进行控制 外层循环控制打印多少行 内部循环控制每行打印多少个表达式以及表达式内容, 比较简单,具体参考代码 思路: 采用循环的方式输入一个数组 使用max标记数组中的最大值,采用循环的方式依次获取数组中的每个元素,与max进行比较,如果arr[i]大于

    2024年01月21日
    浏览(43)
  • 《使用循环做一些练习》---C语言

    目录 前言: 1.练习专题 1.1打印1-100之间的奇数 1.2计算n的阶乘 1.3计算到达n阶乘的前m个阶乘相加 1.4演示字符串动态变化的效果 2.goto语句 ❤博主CSDN:啊苏要学习   ▶专栏分类:C语言◀   C语言的学习,是为我们今后学习其它语言打好基础,C生万物!   开始我们的C语言之旅吧

    2024年02月01日
    浏览(31)
  • C语言for循环结构经典练习

    基本结构: 执行过程: 首先执行式子1(式子1 只执行第一次 ),然后用式子1的结果去和式子2去判断,式子2为真则执行循环语句(为假就不执行),循环语句执行完去执行式子3,再用式子3执行完后的值去判断式子2的真假,如此重复,直到执行完式子3后的结果不符合式子2,循

    2024年02月09日
    浏览(41)
  • C语言循环语句进阶练习题

    第1关:求出分数序列前n项之和 100 任务要求 参考答案 评论98 任务描述 相关知识 scanf 分数序列 编程要求 测试说明 任务描述 本关需要你求出分数序列前 n 项之和。 相关知识 你需要使用到 scanf 函数和循环语句来完成本关任务。 scanf 函数名: scanf 功 能:执行格式化输入 。 用

    2024年02月05日
    浏览(48)
  • 【C语言初阶(5)】循环练习题

    阶乘 某个数从 1 开始一直乘到这个数本身为止; 例如:3 的阶乘就是 1 * 2 * 3 = 6; n 的阶乘就是 1 * 2 * 3 … * n。 解题思路 如果想要阶乘到 n 的话,就要产生 1-n 的数字,此时就需要用到循环。 通过循环产生 1-n 的数字,然后把这些数字累积乘到一个数上。 代码实现 解题思路

    2024年02月11日
    浏览(46)
  • C语言循环练习题(共23题)

    2024年01月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包