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天:谁在说谎问题相关推荐

  1. 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值

    题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...

  2. C语言每日一练——第85天:三色球问题

    C语言每日一练 2022年3月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少 ...

  3. C语言每日一练——第73天:谁是窃贼问题

    C语言每日一练 202年1月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 警察审问4名窃贼嫌疑犯.现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的 ...

  4. C语言每日一练——第35天:打印菱形

    C语言每日一练 2021年10月13日 题目描述 输入菱形的高度n(必须为奇数),即正中间星号的个数,打印出用星号组成的菱形 分析 要打印菱形,先要构想要打印的图形样子,就比如下图这种: 我们可以根据 ...

  5. C语言每日一练——第28天:要求输出国际象棋棋盘

    C语言每日一练 2021年10月6日 题目描述 要求输出国际象棋棋盘 分析 先看看国际象棋的棋盘的长相: 可以看出,国际象棋棋盘呈正方形,里面包含8x8总共64个小方格,它们黑白相间.要想在控制台输出 ...

  6. C语言每日一练——第10天:求一个矩阵主对角线及副对角线元素之和

    C语言每日一练 2021年9月18日 题目描述 求一个矩阵主对角线及副对角线元素之和 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于 ...

  7. C语言每日一练——第1天:字母大小写转换

    C语言每日一练 2021年9月9日 本人C语言菜鸟,最近工作中频频出现C语言小错误,遂决定使用笨方法提高我的C语言水平,坚持每天一个C语言小练习,养成C语言手感,从此让编程成为习惯. 题目描述 从键盘 ...

  8. 【C语言每日一练——第1练:字母大小写转换】

    C语言每日一练 2022年6月13日 题目描述 从键盘输入一个大写字母,要求改用小写字母输出 分析 从键盘输入可以使用scanf或getchar等函数. 大写字母是一个字符,字符类型数据在C语言中是以 ...

  9. C语言每日一练——第80天:换分币问题

    C语言每日一练 2022年2月13日 文章目录 题目描述 问题分析 代码实现 运行结果 题目描述 将5元的人民币兑换成1元.5角和1角的硬币,共有多少种不同的兑换方法. 问题分析 列举3元1次方程 1 ...

最新文章

  1. apache 2.4 配置php,Apache2.4 PHP 配置
  2. 网民网上购物决策时间延长
  3. 总结|深度学习实现缺陷检测
  4. 同步线程和进程间的通信
  5. Contact Bubble View
  6. webform 跨窗体传值
  7. JAVA继承类phone_JAVA(9)继承与多态
  8. spring中bean的两种注入方式
  9. Jquery中post与get之间的区别详细介绍
  10. c语言函数的使用步骤,c语言打开文件函数使用方法
  11. 吴恩达 深度学习 编程作业(2-1.1) Initialization
  12. 英特尔CEO:将在行业整合背景下大力收购半导体企业
  13. centos7查看python安装路径
  14. mysql is blocked because of many connection errors
  15. Python零基础入门(一)——Python基础关键字和语法[学习笔记]
  16. python解释器的下载与安装
  17. Windows 10 如何离线安装NetFx3
  18. svn服务器端 忽略文件夹,SVN忽略不需要版本控制的文件或者文件夹
  19. 安装 yoman, campass, generator, bower, grunt,
  20. 核磁谱图分析步骤_核磁共振解析图谱的步骤

热门文章

  1. 中国风清新手绘工作汇报PPT模板
  2. 全面质量管理的常用长种工具
  3. 物联网区块链有望成新一轮颠覆性技术
  4. 后端系统的缓存使用浅谈
  5. SIMetrix教程-003.菜单栏与工具栏介绍
  6. simulink与modelsim联合仿真buck闭环设计
  7. HAL库实现基于STM32+RN8302B的电压采集
  8. 小学数学题的python实现
  9. HDU3723 Delta Wave —— 卡特兰数
  10. 天气预报 接口数据获取