C语言黑与白问题
2024-09-05 15:02:14
问题描述:
有A、B、C、D、E这5个人,每个人额头上都帖了一张黑或白的纸。5人对坐,每 个人都可以看到其他人额头上纸的颜色。5人相互观察后:
- A说:“我看见有3人额头上贴的是白纸,1人额头上贴的是黑纸。”
- B说:“我看见其他4人额头上贴的都是黑纸。”
- C说:“我看见1人额头上贴的是白纸,其他3人额头上贴的是黑纸 。”
- D说:“我看见4人额头上贴的都是白纸。”
- E什么也没说。
现在己知额头上贴黑纸的人说的都是谎话,额头贴白纸的人说的都是实话。问这5人 谁的额头上贴的是白纸,谁的额头上贴的是黑纸?
问题分析:
呃呃,刚开始推出来了正确答案,被学弟问的不会用代码写了...
分析每个人说的话,对于每个人来说只有两种情况,说谎或者说的是真话,把所有情况暴力枚举,选出来合适的答案即可
求解逻辑推理类问题的关键就是写出正确的逻辑表达式。将问题分析中列出的限定条件用程序语言描述清楚后就可以使用穷举法来获得最终的判断结果。
用 0 表示贴的是黑纸,1 表示贴的是白纸
判断条件:
(a && (b+c+d+e==3) || !a && (b+c+d+e!=)) &&
(b && (a+c+d+e==0) || !b && (a+c+d+e!=)) &&
(c && (a+b+d+e==1) || !c && (a+b+d+e!=)) &&
(d && (a+b+c+e==4) || !d && (a+b+c+e!=))
代码:
#include<stdio.h>
int main()
{
int a, b, c, d, e; /*0表示黑色,1表示白色*/
for(a=; a<=; a++) /*穷举五个人额头帖纸颜色的全部可能*/
for(b=; b<=; b++)
for(c=; c<=; c++)
for(d=; d<=; d++)
for(e=; e<=; e++)
if( (a && (b+c+d+e==) || !a && (b+c+d+e!=)) &&
(b && (a+c+d+e==) || !b && (a+c+d+e!=)) &&
(c && (a+b+d+e==) || !c && (a+b+d+e!=)) &&
(d && (a+b+c+e==) || !d && (a+b+c+e!=))
)
{
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 ;
}
最新文章
- niginx 负载均衡
- 解决ThinkPHP Call to a member function assign() on a non-object
- Java 7 中的Switch 谈 Java版本更新和反编译知识
- selenium+eclispse里代码备注
- C#操作字符串方法总结<;转>;
- JavaScript - 变量,作用域,内存
- VSS迁移备忘
- dir cmd、the DIR Command、windows
- 802.11 wireless 六
- By类的使用
- Ubuntu下Qt-4.7.1的静态编译
- nopCommerce架构分析系列(二)数据Cache
- Windows 多用户远程访问 Ubuntu 14.04桌面
- R语言中的if-else语句写法
- JVM 运行时数据区总结 栈 堆 堆大小配置总结
- c# ef 排序字段动态,构建动态Lambda和扩展方法OrderBy
- tongweb安装后无法启动问题
- app v2界面
- nginx中server的匹配顺序
- kettle7.1无法从Mongo中读取数据