C语言每日一练——第67天:谁在说谎问题
C语言每日一练
2021年12月12日
文章目录
- 题目描述
- 问题分析
- 代码实现
- 运行结果
- 网上参考
题目描述
现有张三、李四和王五3个人,张三说李四在说谎,李四说王五在说谎,而王五说张三和李四两人都在说谎。要求编程求出这3个人中到底谁说的是真话,谁说的是假话。
问题分析
既然要使用编程解决这个问题,那就不要尝试动脑筋去推理,不然要电脑做什么。。。
所以我们可以直接遍历所有可能,将三个人所说的话的真假(说谎变量
)定义为整型变量Z、L、W
,为0表示说谎,1表示说的是真话。
那怎么判断三个人是否说谎呢?
直接用Z、L、W
和他们所说的话做对比就能得出答案:
张三说李四说谎,所以张三说的话就是L == 0
,以此类推,就能归纳出如下的表达式(说话表达式
):
/* 三个人所说的话 */
#define ZHANSHAN (L == 0) //李四在说谎
#define LISI (W == 0) //王五在说谎
#define WANGWU (Z == 0 && L == 0) //张三和李四在说谎
将所有说谎变量
遍历的结果和上面三个表达式作比较,当三个人的说谎变量
和说话表达式
都匹配时,即当ZHANSHAN == Z && LISI == L && WANGWU == W
为真时,就得到了正确答案。
代码实现
#include <stdio.h>/* 三个人所说的话 */
#define ZHANSHAN (L == 0) //李四在说谎
#define LISI (W == 0) //王五在说谎
#define WANGWU (Z == 0 && L == 0) //张三和李四在说谎int main()
{/* 张三、李四、王五是否说谎,0表示说谎 */int Z = 0, L = 0, W = 0;for(Z = 0; Z <= 1; Z++)for(L = 0; L <= 1; L++)for(W = 0; W <= 1; W++){if(ZHANSHAN == Z && LISI == L && WANGWU == W){Z ? puts("张三说的是真话") : puts("张三说的是假话");L ? puts("李四说的是真话") : puts("李四说的是假话");W ? puts("王五说的是真话") : puts("王五说的是假话");}}return 0;
}
运行结果
网上参考
原文链接:http://c.biancheng.net/cpp/html/3350.html
这份代码的判断条件是我的两倍,个人觉得没这个必要,不过思路都是一样的。
原文思路:
#include<stdio.h>
int main()
{int x, y, z;for(x=0; x<=1; x++)for(y=0; y<=1; y++)for(z=0; z<=1; z++)if( ((x&&!y) || (!x&&y)) && ((y&&!z) || (!y&&z)) && ((z&&x==0&&y==0) || (!z&&x+y!=0)) ){printf("张三说的是%s.\n",x?"真话":"假话");printf("李四说的是%s.\n",y?"真话":"假话");printf("王五说的是%s.\n",z?"真话":"假话");}return 0;
}
C语言每日一练——第67天:谁在说谎问题相关推荐
- 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值
题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...
- C语言每日一练——第85天:三色球问题
C语言每日一练 2022年3月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少 ...
- C语言每日一练——第73天:谁是窃贼问题
C语言每日一练 202年1月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 警察审问4名窃贼嫌疑犯.现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的 ...
- C语言每日一练——第35天:打印菱形
C语言每日一练 2021年10月13日 题目描述 输入菱形的高度n(必须为奇数),即正中间星号的个数,打印出用星号组成的菱形 分析 要打印菱形,先要构想要打印的图形样子,就比如下图这种: 我们可以根据 ...
- C语言每日一练——第28天:要求输出国际象棋棋盘
C语言每日一练 2021年10月6日 题目描述 要求输出国际象棋棋盘 分析 先看看国际象棋的棋盘的长相: 可以看出,国际象棋棋盘呈正方形,里面包含8x8总共64个小方格,它们黑白相间.要想在控制台输出 ...
- C语言每日一练——第10天:求一个矩阵主对角线及副对角线元素之和
C语言每日一练 2021年9月18日 题目描述 求一个矩阵主对角线及副对角线元素之和 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于 ...
- C语言每日一练——第1天:字母大小写转换
C语言每日一练 2021年9月9日 本人C语言菜鸟,最近工作中频频出现C语言小错误,遂决定使用笨方法提高我的C语言水平,坚持每天一个C语言小练习,养成C语言手感,从此让编程成为习惯. 题目描述 从键盘 ...
- 【C语言每日一练——第1练:字母大小写转换】
C语言每日一练 2022年6月13日 题目描述 从键盘输入一个大写字母,要求改用小写字母输出 分析 从键盘输入可以使用scanf或getchar等函数. 大写字母是一个字符,字符类型数据在C语言中是以 ...
- C语言每日一练——第80天:换分币问题
C语言每日一练 2022年2月13日 文章目录 题目描述 问题分析 代码实现 运行结果 题目描述 将5元的人民币兑换成1元.5角和1角的硬币,共有多少种不同的兑换方法. 问题分析 列举3元1次方程 1 ...
最新文章
- apache 2.4 配置php,Apache2.4 PHP 配置
- 网民网上购物决策时间延长
- 总结|深度学习实现缺陷检测
- 同步线程和进程间的通信
- Contact Bubble View
- webform 跨窗体传值
- JAVA继承类phone_JAVA(9)继承与多态
- spring中bean的两种注入方式
- Jquery中post与get之间的区别详细介绍
- c语言函数的使用步骤,c语言打开文件函数使用方法
- 吴恩达 深度学习 编程作业(2-1.1) Initialization
- 英特尔CEO:将在行业整合背景下大力收购半导体企业
- centos7查看python安装路径
- mysql is blocked because of many connection errors
- Python零基础入门(一)——Python基础关键字和语法[学习笔记]
- python解释器的下载与安装
- Windows 10 如何离线安装NetFx3
- svn服务器端 忽略文件夹,SVN忽略不需要版本控制的文件或者文件夹
- 安装 yoman, campass, generator, bower, grunt,
- 核磁谱图分析步骤_核磁共振解析图谱的步骤