C趣味程序百例(16)迷语博士的难题(1)
53.迷语博士的难题(1)
诚实族和说谎族是来自两个荒岛的不同民族,诚实族的人永远说真话,而说谎族的人永远说假话。迷语博士是个聪明的人,他要来判断所遇到的人是来自哪个民族的。
迷语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。为了调查这三个人是什么族的,博士分别问了他们的问题,这是他们的对话:
问第一个人:“你们是什么族?”,答:“我们之中有两个来自诚实族。”第二个人说:“不要胡说,我们三个人中只有一个是诚实族的。”第三个人听了第二个人的话后说:“对,就是只有一个诚实族的。”
请根据他的回答判断他们分别是哪个族的。
*问题分析与算法设计
假设这三个人分别为A、B、C,若说谎其值为0,若诚实,其值为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
利用穷举法,可以很容易地推出结果。
*程序与程序注释
#include
void main()
{
int a,b,c;
for(a=0;a for(b=0;b for(c=0;c if((a&&a+b+c==2||!a&&a+b+c!=2) /*判断是否满足题意*/
53.谜题博士(1)
老实人和骗子是来自两个荒岛的不同民族。诚实的人总是说真话,而说谎的人总是说假话。米语博士是个聪明人。他想判断他遇到的人来自哪个民族。
苦难博士遇到三个人,知道他们可能来自老实人,也可能来自骗子。为了调查这三个人属于什么种族,医生分别向他们提问。这是他们的对话:
问第一个人,“你是什么种族?”答:“我们两个都是老实人。”第二个人说:“别瞎说。我们三个中只有一个是诚实的。”第三个人听了第二个人的话,说道:“是的,只有一个诚实的人。”
请根据他的回答判断他们属于哪个种族。
*问题分析与算法设计
假设这三个人分别是A、B、C。如果他们说谎,他们的值是0,如果他们诚实,他们的值是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
利用穷举法,可以很容易地推导出结果。
*程序和程序注释
# include
void main()
{
int a,b,c;
for(a = 0;a for(b = 0;b for(c = 0;c if((a&&a+b+c==2||!a&&a+b+c!=2) /*判断是否满足题意*/
0条评论