问题描述

有A、B、C、D、E这5个人,每个人额头上都帖了一张黑或白的纸。5人对坐,每 个人都可以看到其他人额头上纸的颜色。5人相互观察后:

A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑纸。”

B说:“我看见其他4人额头上贴的都是黑纸。”

C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸 。”

D说:“我看见4人额头上贴的都是白纸。”

E什么也没说。

现在己知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。问这5人 谁的额头上贴的是白纸,谁的额头上贴的是黑纸?

问题分析

该问题是一个逻辑推理问题。分析A、B、C、D这4个人所说的话可以得出4个条件。假设用变量a、b、c、d、e分别代表A、B、C、D、E这5个人额头上贴纸的颜色,当变量的取值为1时表示该人额头上贴纸的颜色为白色,当变量取值为0时表示该人额头上贴纸的颜色为黑色。则分析题目中4个人所说的话如下:

(1) A说:“我看见有3人额头上帖的是白纸,1人额头上贴的是黑纸。”

如果A额头上贴的是白纸,那么他说的是实话,则有表达式:

a&&b+c+d+e==3

如果A额头上贴的是黑纸,那么他说的是谎话,则有表达式:

!a&&b+c+d+e!=3

(2) B说:“我看见其他4人额头上贴的都是黑纸。”

如果B额头上贴的是白纸,那么他说的是实话,则有表达式:

b&&a+c+d+e==0

如果B额头上贴的是黑纸,那么他说的是谎话,则有表达式:

!b&&a+c+d+e!=0

(3) C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸。”

如果C额头上贴的是白纸,那么他说的是实话,则有表达式:

c&&a+b+d+e=1

如果C额头上贴的是黑纸,那么他说的是谎话,则有表达式:

!c&&a+b+d+e!=1

(4) D说:“我看见4人额头上贴的都是白纸。”

如果D额头上贴的是白纸,那么他说的是实话,则有表达式:

d&&a+b+c+e==4

如果D额头上贴的是黑纸,那么他说的是谎话,则有表达式:

!d&&a+b+c+e!=4

算法设计

求解逻辑推理类问题的关键就是写出正确的逻辑表达式。将问题分析中列出的限定条件用程序语言描述清楚后就可以使用穷举法来获得最终的判断结果。

下面使用C语言中的逻辑表达式,将问题分析中得到的几个条件表达出来,得到的逻辑表达式如下:

(a&&b+c+d+e==3 || !a&&b+c+d+e!=3) &&

(b&&a+c+d+e==0 || !b&&a+c+d+e!=0) &&

(c&&a+b+d+e==1 || !c&&a+b+d+e!=1) &&

(d&&a+b+c+e==4 || !d&&a+b+c+e!=4)

在程序中穷举每个人额头帖纸的颜色的所有可能的情况,并代入上面的逻辑表达式中进行推理运算,能使该逻辑表达式的值为真的结果就是正确的结果。

下面是完整的代码:

#include

int main()

{

int a, b, c, d, e; /*0表示黑色,1表示白色*/

for(a=0; a<=1; a++) /*穷举五个人额头帖纸颜色的全部可能*/

for(b=0; b<=1; b++)

for(c=0; c<=1; c++)

for(d=0; d<=1; d++)

for(e=0; e<=1; e++)

if( (a&&b+c+d+e==3 || !a&&b+c+d+e!=3) &&

(b&&a+c+d+e==0 || !b&&a+c+d+e!=0) &&

(c&&a+b+d+e==1 || !c&&a+b+d+e!=1) &&

(d&&a+b+c+e==4 || !d&&a+b+c+e!=4)

)

{

printf("A额头上的贴纸是%s色的.\n",a?"白":"黑");

printf("B额头上的贴纸是%s色的.\n",b?"白":"黑");

printf("C额头上的贴纸是%s色的.\n",c?"白":"黑");

printf("D额头上的贴纸是%s色的.\n",d?"白":"黑");

printf("E额头上的贴纸是%s色的.\n",e?"白":"黑");

}

return 0;

}

运行结果:

A额头上的贴纸是黑色的.

B额头上的贴纸是黑色的.

C额头上的贴纸是白色的.

D额头上的贴纸是黑色的.

E额头上的贴纸是白色的.

c语言编译时字符黑色,C语言黑与白问题相关推荐

  1. c语言编译时老是1error,C语言笔记1 --新手常常犯的错误

    对于刚进入大学写代码的同学来说,把一个个字母,关键字敲进电脑,在让编译器执行,输出自己想要的结果,一定是一件开心又幸福的事情. 但是在写代码的过程中,对于刚刚接触代码的同学来说,是不可能写完了之后调试 ...

  2. c语言编译时检查逻辑错误吗,C语言陷阱与技巧20节,自定义“编译时”assert方法,在代码编译阶段检查“逻辑”错误...

    在C语言程序开发中,程序员写代码时应该考虑的"面面俱到",这样才能写出功能稳定的程序.例如,在实现 open() 函数时,先完成它的功能固然是重要的,但是程序员还需要考虑各种&qu ...

  3. c语言编译说文件不存在,c语言编译时缺少头文件,库的解决办法

    问题产生原因 我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等.但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的 ...

  4. c语言缺少函数头怎么办,c语言编译时如何解决缺少头文件和库的问题

    问题原因: 我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等.但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的编 ...

  5. C语言编译时产生的警告:initializing ‘char *‘ with an expression of type ‘const char *‘ discards qualifiers

    警告的产生: char *my_strstr(const char *str1,const char *str2) {const char *s1 = NULL;const char *s2 = NU ...

  6. C语言编译时版本号自动加一,VC使用编译时间作为版本号标识的方法

    常用方法分两步: 1. 得到编译时间: 2. 设置基准时间,以编译时间距基准时间的总天数的2倍作为版本号,适当情况还可加上初值: 其中第一步实现有两种方法: 1. 直接使用系统宏:CString Oc ...

  7. c语言格式化输入字符型,C语言——字符串和格式化输入/输出

    今天,学习了C Primer Plus的第四章.本章讲解了一些简单的C预处理器的知识,一些字符.字符串以及数组等相关概念以及输入输出函数的使用. 现将知识点总结如下: 字符串:一个或多个字符的序列(双 ...

  8. c语言编译常见错误提示,c语言编译常见错误

    c语言编译常见错误 (2012-04-17 21:33:53) 标签: 杂谈 分类: 计算机 1."c" not an argument in function sum 该标识符不 ...

  9. C语言怎么判断字符YN,c语言中的宏_详解(转)

    1. 简单宏定义 简单的宏定义有如下格式: [#define指令(简单的宏)] #define 标识符替换列表 替换列表是一系列的C语言记号,包括标识符.关键字.数.字符常量.字符串字面量.运算符和标 ...

最新文章

  1. 那些面试官,都是如何把候选人聊崩溃的
  2. nowcoder20C 位数差
  3. 深度学习笔记之win7下TensorFlow的安装
  4. android .9编译,在Ubuntu 9.04下编译Android源码
  5. SPOJ GCDEX (数论)
  6. 高级定价基本概念理解
  7. spine纹理解包 黑底_本期全欧美阵容!种草了艾玛罗的斑马纹,海狸的针织Bra【海报街拍】...
  8. 学习c/c++的50个好网站(转)
  9. 快看这里,如何卸载windows11自动更新下载的文件还你C盘空间
  10. 《平衡掌控者 游戏数值战斗设计》学习笔记(一)游戏研发概要
  11. MAC之U盘(制作U盘启动必须是在mac系统中)
  12. C语言程序中数字字符是什么,C语言中如何识别字符与数字
  13. 推荐收藏 | 常用图片处理网站合集(8个网站)
  14. LeetCode 6036. 构造字符串的总得分和
  15. 行车记录仪开发方案比较--转载
  16. 华为儿童手表可以升级鸿蒙吗,华为儿童手表 4X功能更新,儿童版微信上线
  17. python文件夹在哪_Python文件夹与文件的相关操作(推荐)
  18. 13,python中tkinter模块里的按键事件
  19. 吴恩达 深度学习 编程作业(2-2)- Optimization Methods
  20. Manifest merger failed问题:tools:replace=android:theme和tools:replace=android:icon

热门文章

  1. easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案
  2. 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法
  3. SQL SERVER占用服务器内存过高的解决方案
  4. npm ERR! missing script: dev 解决方案
  5. JS组件系列——Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
  6. MySQL大小写敏感的解决方案
  7. 如何禁用<textarea>的调整大小抓取器? [重复]
  8. 什么是Unwind segues,您如何使用它们?
  9. 如何为同一字体添加多个字体文件?
  10. C#DateTime为“ YYYYMMDDHHMMSS”格式