迷题出自1981年柏林的德国逻辑思考学院

原创 2004年10月22日 08:52:00
1 有五栋五种颜色的房子
2 每一位房子的主人国籍都不同
3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物
4 没有人有相同的宠物,抽相同牌子的香烟,喝相同的饮料
提示
1、 英国人住在红房子里
2 、瑞典人养了一条狗
3 、丹麦人喝茶
4 、绿房子在白房子左边
5 、绿房子主人喝咖啡
6 、抽PALL MALL烟的人养了一只鸟
7 、黄房子主人抽DUNHILL烟
8 、住在中间那间房子的人喝牛奶
9 、挪威人住第一间房子
10 、抽混合烟的人住在养鱼人的旁边
11 、养马人住在DUNHILL烟的人旁边
12 、抽BLUE MASTER烟的人喝啤酒
13、 德国人抽PRINCE烟
14 、挪威人住在蓝房子旁边
15 、抽混合烟的人的邻居喝矿泉水
问题是:谁养鱼?
using System;
namespace netsafe.math
{
public class ayst
{
/// <summary>
/// 问题中的所有元素
/// </summary>
string[,] data= {{"黄房子","蓝房子","白房子","红房子","绿房子"},
{"挪威人","英国人","德国人","丹麦人","瑞典人"},
{"DUNHILL","PRINCE","混合烟", "PALL MALL","BLUE MASTER"},
{"咖 啡","矿泉水","茶","牛奶"," 啤酒 "},
{"鱼"," 恐龙","马", "鸟","狗"}};
/// <summary>/// answer用来存放答案
/// </summary>
int[,] answer=new int[6, 6];
int[,] ALL=new int[6,122];
int count=1;
int nLevel = 0;
int[] List=new int[6];
public static void Main(string[] args)
{
ayst c=new ayst();
c.p(); ///生成全排列到all
c.run();
Console.Read(); /// 按任意键继续
}
void run()
{
int i1,i2,i3,i4,i5;///通过逻辑条件顺序的有效选择来优化程序
for (i1=1;i1<=120;i1++)///房子
{
///9 、挪威人住第一间房子
///14 、挪威人住在蓝房子旁边
///不满足条件就短路
///
if (ALL[2,i1]!=2)continue;
for(int j=0;j<5;j++,answer[j,1]=ALL[j,i1]);
for (i2=1;i2<=120;i2++)///人种
{
for(int j=0;j<5;j++,answer[j,2]=ALL[j,i2]);
///9 、挪威人住第一间房子
if (ALL[1,i2]!=1)continue;
///1、 英国人住在红房子里
///
if (find(1,4)!=find(2,2))continue;
///4 、绿房子在白房子左边
///
if (find(1,5)>find(1,3))continue;
for (i3=1;i3<=120;i3++)///烟
{
for(int j=0;j<5;j++,answer[j,3]=ALL[j,i3]);
///13、 德国人抽PRINCE烟
///
if(find(2,3)!=find(3,2))continue;
///7 、黄房子主人抽DUNHILL烟
///
if(find(1,1)!=find(3,1))continue;
for (i4=1;i4<=120;i4++)///饮料
{
for(int j=0;j<5;j++,answer[j,4]=ALL[j,i4]);
///8 、住在中间那间房子的人喝牛奶
///
if(ALL[3,i4]!=4)continue;
///5 、绿房子主人喝咖啡
///
if (find(1,5)!=find(4,1))continue;
///3 、丹麦人喝茶
///
if(find(2,4)!=find(4,3))continue;
///15 、抽混合烟的人的邻居喝矿泉水
if(Math.Abs(find(3,3)-find(4,2))!=1)continue;
///12 、抽BLUE MASTER烟的人喝啤酒
///
if(find(3,5)!=find(4,5))continue;
for (i5=1;i5<=120;i5++)///宠物
{
for(int j=0;j<5;j++,answer[j,5]=ALL[j,i5]);
///10 、抽混合烟的人住在养鱼人的旁边
///
if(Math.Abs(find(3,3)-find(5,1))!=1)continue;
///2 、瑞典人养了一条狗
///
if(find(2,5)!=find(5,5))continue;
///6 、抽PALL MALL烟的人养了一只鸟
///
if(find(3,4)!=find(5,4))continue;
///11 、养马人住在DUNHILL烟的人旁边
///
if(Math.Abs(find(5,3)-find(3,1))!=1)continue;
///
///能活到这里的data,当然是答案喽
///
write_answer();
}
}
}
}
}
}
/// <summary>
/// 非常典型的用递归实现排列组合算法。
/// </summary>
public void p()   
{
int nCount,nJudge,key;
nLevel++;
if(nLevel>5)
{
writeall();///有一种排列就写到All数组里
nLevel--;
return;
}
for(nCount=1;nCount<=5;nCount++)
{
key=0;
for(nJudge=0;nJudge<=nLevel-1;nJudge++)
if(nCount==List[nJudge])
{
key=1;
break;
}
if(key==0)
{
List[nLevel]=nCount;
p();
}
}
nLevel--;
}
/// <summary>
/// 写入all数组
/// </summary>
void writeall()
{
int i;
for (i=1;i<=5;i++)
{
ALL[i,count]=List[i];
}
count++;
}
int find(int i,int j)
{
int k;
for(k=0;k<=5;k++)
{
if (answer[k,i]==j)
{
return k;
}
}
return -1;
}
/// <summary>
/// 将答案打印出来
/// </summary>
void write_answer()
{
for (int i = 1;i<=5;i++)
{
for(int j=1 ;j<=5;j++)
{
Console.Write(data[i-1,answer[j,i]-1]+",");
}
Console.WriteLine();
}
Console.WriteLine();
}
}
}
说明:程序使用目前最热门的C#语言,在Microsoft Visual Studio.net下编译执行通过。如果你没有Microsoft Visual C# 需要安装Microsoft(r) .NET Framework SDK ,把上述代码保存到ayst.cs,然后在命令行模式下执行csc ayst.cs ,然后执行ayst.exe也可以。

1981年柏林的德国逻辑思考学院面试题,逆天5*5推理题!

前提: 1. 有五间房屋排成一列 2. 所有房屋的外表颜色都不一样 3. 所有的屋主来自不同的国家 4. 所有的屋主都养不同的宠物;喝不同的饮料;抽不同的香烟 英国人住在红色房屋里 ...
  • cheeseandcake
  • cheeseandcake
  • 2017年05月28日 20:02
  • 544

Java笔试面试题整理第四波

1、HashMap、HashTable、ConcurrentHashMap的区别     【参考:http://www.cnblogs.com/carbs/archive/2012/07/04/257...
  • shakespeare001
  • shakespeare001
  • 2016年04月28日 15:40
  • 10097

亚马逊在德国设立第四个AI研究中心 专注视觉研究

据外媒报道,电商巨头亚马逊宣布,将在德国建立一个新的研究中心,专注于开发人工智能,以提高客户体验—尤其是在视觉系统方面。亚马逊表示,在该研究中心进行的研究也将致力于帮助亚马逊云服务(AWS)的用户及其...
  • gh13uy2ql0N5
  • gh13uy2ql0N5
  • 2017年10月24日 00:00
  • 497

24 《金字塔原理:思考、表达和解决问题的逻辑》-豆瓣评分8.1

与您一起终身学习~ 金字塔原理【 逻辑能力几乎是一切思考能力的基础,而金字塔是建构逻辑的理想结构。】      在思考和解决问题时,怎么样才能重点突出、思路清晰?在表达时如何才能说到点子上并让听者产生...
  • czg13548930186
  • czg13548930186
  • 2017年06月17日 09:56
  • 1056

Ytu 1010: 目标柏林

Description 1945年初,苏军和英美联军已从东西两面攻入德国国境。 4月初,在苏军和英美联军的夹击下,德军只能龟缩在以柏林为中心的德国东部的狭长地带,成了瓮中之鳖。但希特勒困兽犹斗,一方...
  • zp___waj
  • zp___waj
  • 2015年04月01日 09:18
  • 664

温伯格的《系统化思维导论》,结合《语言本能》《改变》《科学革命的范式》和逻辑学的一些书,谈谈学科的边界

学无止境,越看书越暴露自己的认识和能力的缺乏,看这类系统思维类的书,感到智商需要充值,尤甚。 什么事情,都害怕认真二字,因为一认真,就要面对普通人在做人做事方方面面的考虑的欠缺。软件开发也是如此,软件...
  • irisat163
  • irisat163
  • 2016年09月03日 19:39
  • 312

柏林噪声原理

外文链接: http://freespace.virgin.net/hugo.elias/models/m_perlin.htm 翻译链接 http://www.cnblogs.com/Mem...
  • u014761712
  • u014761712
  • 2017年05月07日 14:58
  • 440

PHP学习随想之“思维逻辑”与“记忆”

摘要:掌握新技能,方法最重要。书上说:学习软件开发,“思维逻辑”是核心,”记忆”只是辅助。百思不得其解,偶得灵光,记录在此。...
  • mika85489
  • mika85489
  • 2015年12月06日 10:36
  • 475

图形学基础(4)——柏林噪声

柏林噪声  如果要构建复杂的表面,经常需要在纹理中加入一些可控的随机变化。比如不同的木板纹路,大理石纹路以及水面等等。   这个时候就需要引入可控的随机特征——噪声。总的来说,图形学中的噪声表示为 ...
  • qq_33274326
  • qq_33274326
  • 2017年03月29日 17:34
  • 946

Minecraft的世界生成过程(三)噪声函数

接下来的地形生成代码会接触到噪声函数,所以本篇内容就先逆向MC的噪声函数吧...
  • xfgryujk
  • xfgryujk
  • 2017年03月20日 20:31
  • 1622
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:迷题出自1981年柏林的德国逻辑思考学院
举报原因:
原因补充:

(最多只允许输入30个字)