逻辑推理题-用C++实现(3)--谜语博士的难题1
2012-11-23 13:30
274 查看
1.迷语博士的难题(1)
*题目
诚实族和说谎族是来自两个荒岛的不同民族,诚实族的人永远说真话,而说谎族的人永远说假话。
迷语博士是个聪明的人,他要来判断所遇到的人是来自哪个民族的。
迷语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。
为了调查这三个人是什么族的,博士分别问了他们的问题,这是他们的对话:
问第一个人:"你们是什么族?",答:"我们之中有两个来自诚实族。" 如果A说真话A+B+C=2 ,如果A说假话 A+B+C!=2
第二个人说:"不要胡说,我们三个人中只有一个是诚实族的。" 如果B说真话A+B+C=1,如果B说假话 A+B+C!=1
第三个人听了第二个人的话后说:"对,就是只有一个诚实族的。" 如果C说真话 A+B+C=1,如果C说假话A+B+C!=1
请根据他的回答判断他们分别是哪个族的。
*问题分析与算法设计
假设这三个人分别为A、B、C,若说谎其值为0,若诚实,其值为1。根据题目中三个人的话可分别列出:
第一个人: a&&a+b+c==2||!a&&a+b+c!=2
如果A说真话A+B+C=2 ,如果A说假话 A+B+C!=2
第二个人: b&&a+b+c==1||!b&&a+b+c!=1
如果B说真话A+B+C=1,如果B说假话 A+B+C!=1
第三个人: c&&a+b+c==1||!c&&a+b+c!=1
如果C说真话 A+B+C=1,如果C说假话A+B+C!=1
利用穷举法,可以很容易地推出结果。
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
if((a&&a+b+c==2||!a&&a+b+c!=2)
&&(b&&a+b+c==1||!b&&a+b+c!=1)
&&(c&&a+b+c==1||!c&&a+b+c!=1))
{
cout<<"A is a "<<(a?"honest":"lier")<<endl;
cout<<"B is a "<<(b?"honest":"lier")<<endl;
cout<<"C is a "<<(c?"honest":"lier")<<endl;
}
return 0;
}
![](http://img.my.csdn.net/uploads/201211/23/1353648912_6993.JPG)
2.谜语博士的难题(2)
*题目
诚实族和说谎族是来自两个荒岛的不同民族,诚实族的人永远说真话,而说谎族的人永远说假话。
迷语博士是个聪明的人,他要来判断所遇到的人是来自哪个民族的。
迷语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。
为了调查这三个人是什么族的,博士分别问了他们的问题,这是他们的对话:
问第一个人:"你们是什么族?",答:"我们之中有两个来自诚实族。" 如果A说真话A+B+C=2 ,如果A说假话 A+B+C!=2
第二个人说:"不要胡说,我们三个人中只有一个是诚实族的。" 如果B说真话A+B+C=1,如果B说假话 A+B+C!=1
第三个人听了第二个人的话后说:"对,就是只有一个诚实族的。" 如果C说真话 A+B+C=1,如果C说假话A+B+C!=1
请根据他的回答判断他们分别是哪个族的。
*问题分析与算法设计
假设这三个人分别为A、B、C,若说谎其值为0,若诚实,其值为1。根据题目中三个人的话可分别列出:
第一个人: a&&a+b+c==2||!a&&a+b+c!=2
如果A说真话A+B+C=2 ,如果A说假话 A+B+C!=2
第二个人: b&&a+b+c==1||!b&&a+b+c!=1
如果B说真话A+B+C=1,如果B说假话 A+B+C!=1
第三个人: c&&a+b+c==1||!c&&a+b+c!=1
如果C说真话 A+B+C=1,如果C说假话A+B+C!=1
利用穷举法,可以很容易地推出结果。
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
if((a&&a+b+c==2||!a&&a+b+c!=2)
&&(b&&a+b+c==1||!b&&a+b+c!=1)
&&(c&&a+b+c==1||!c&&a+b+c!=1))
{
cout<<"A is a "<<(a?"honest":"lier")<<endl;
cout<<"B is a "<<(b?"honest":"lier")<<endl;
cout<<"C is a "<<(c?"honest":"lier")<<endl;
}
return 0;
}
2.谜语博士的难题(2)
相关文章推荐
- 逻辑推理题-用C++实现(4)--谜语博士的难题1-思考题
- 逻辑推理与判断(谜语博士的难题(1))
- 逻辑推理与判断(谜语博士的难题)
- 逻辑推理与判断(谜语博士的难题(2))
- 一道逻辑推理题的C++实现
- 逻辑推理题-用C++实现(2)--黑与白
- 逻辑推理题-用C++实现(1)--谁是窃贼
- 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
- 用C\C++实现离散数学简单逻辑运算
- C++实现类,输入三个点坐标,生成一元二次方程(含推理过程)
- (百例编程)53.谜语博士的难题(1)
- (百例编程)54.谜语博士的难题(2)
- 逻辑回归(Logistic Regression)简介及C++实现
- [C++]使用位逻辑运算来实现位向量的理解
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
- [java面试]逻辑推理6 10 18 32 下一个数?编程实现输入任意一个N位置,该数是多少?java实现
- C++ 单链表基本操作分析与实现 链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结
- 《机器学习实战》第5章逻辑回归算法的C++实现方式
- 谜语博士的难题--两面族