(百例编程)54.谜语博士的难题(2)

本文探讨了两面族的说话特点,即真假交替且无固定规律。通过编程逻辑分析,尝试解答关于这个神秘民族的难题。
摘要由CSDN通过智能技术生成

题目:两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替。如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第一句是真是假没有规律。

迷语博士遇到三个人,知道他们分别来自三个不同的民族:诚实族、说谎族和两面族。三人并肩站在博士前面。
博士问左边的人:“中间的人是什么族的?”,左边的人回答:“诚实族的”。
博士问中间的人:“你是什么族的?”,中间的人回答:“两面族的”。
博士问右边的人:“中间的人究竟是什么族的?”,右边的人回答:“说谎族的”。

请问:这三个人都是哪个民族的?

/*题目:两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替。
如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第
一句是真是假没有规律。迷语博士遇到三个人,知道他们分别来自三个不同的民族:
诚实族、说谎族和两面族。三人并肩站在博士前面。博士问左边的人:“中间的人是
什么族的?”,左边的人回答:“诚实族的”。博士问中间的人:“你是什么族的?
”,中间的人回答:“两面族的”。博士问右边的人:“中间的人究竟是什么族的?
”,右边的人回答:“说谎族的”。请问:这三个人都是哪个民族的?
*/
//by as1138 2011-04-15

#include <iostream>
using namespace std;

int main(void)
{
	int a,b,c;
	
	for(a=2;a>=0;--a)
	 for(b=2;b>=0;--b)
	  for(c=2;c>=0;--c)
		  if ((((a==1||a==2)&&b==1)||((a==0||a==2)&&b!=1))&&//左边说真话||左边说假话
			  ((b==2&&a==0&&b==0)||(b==0&&((a==1&&c==2)||(a==2&&c==1))))&&//中间说真话||中间说假话
			  (((c==1||c==2)&&b==0)||((c==0||c==2)&&b!=0))&&//右边说真话||右边说假话
			  a+b+c==3//每个族的都有一个人
			  )
		  {
			  if(a==2)
				  cout<<"左边的人是两面人!"<<endl;
			  else if(a==1)
				  cout<<"左边的人是诚实族!"<<endl;
			  else
				  cout<<"左边的人是说谎族!"<<endl;

			  if(b==2)
				  cout<<"中间的人是两面人!"<<endl;
			  else if(b==1)
				  cout<<"中间的人是诚实族!"<<endl;
			  else
				  cout<<"中间的人是说谎族!"<<endl;

			  if(c==2)
				  cout<<"右边的人是两面人!"<<endl;
			  else if(c==1)
				  cout<<"右边的人是诚实族!"<<endl;
			  else
				  cout<<"右边的人是说谎族!"<<endl;
		  }

		 
	return 1;
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值