原文地址:http://www.cnblogs.com/foundation/archive/2008/01/14/1037907.html

据说是爱因斯坦迷题,不知是真是假,不过这道集合运算的题还是挺有意思的,比一般的[谁是凶手]的题多了集合项之间的关系
用linq的集合运算符,不用if、for等控制流语句解一下这道题.

本题的解题方式用的是工作流处理问题的方式
将事项分为阶段(也叫状态),每个阶段按一定顺连接,每个阶段内由处理该阶段问题的一组业务结点组成,业务结点的添加或移除不影响处理问题的架构
还有,业务结点最好是真正真实业务的映射,最好不要出现
 [ 8、挪威人住第一间房 ]+   [14、挪威人住蓝色房子隔壁],推出[第2间房子是蓝色]的业务结点,要推也得由系统推(这叫反映链),而不能由开发人员推,这样就可以在架构完成后随意修改业务结点,本例用的就是这种方式,由于没有人工推理加入,执行效率有些低,
在Core2 Duo CPU 7300上,用 System.Diagnostics.Stopwatch
Debug   模式下用时:06.5122712
Release 模式下用时:05.2872722

问题:
在一条街上,有5座房子,喷了5种颜色,每个房里住着不同国籍的人,每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
  问题是:谁养鱼?
  提示:
  1、英国人住红色房子
  2、瑞典人养狗
  3、丹麦人喝茶
  4、绿色房子在白色房子左面
  5、绿色房子主人喝咖啡
  6、抽Pall Mall 香烟的人养鸟
  7、黄色房子主人抽Dunhill 香烟
  8、挪威人住第一间房
  9、住在中间房子的人喝牛奶
  10、抽Blends香烟的人住在养猫的人隔壁
  11、养马的人住抽Dunhill 香烟的人隔壁
  12、抽Blue Master的人喝啤酒
  13、德国人抽Prince香烟
  14、挪威人住蓝色房子隔壁
15、抽Blends香烟的人有一个喝水的邻居


代码

[转]Linq 解爱因斯坦迷题using System;
[转]Linq 解爱因斯坦迷题
using System.Collections.Generic;
[转]Linq 解爱因斯坦迷题
using System.Linq;
[转]Linq 解爱因斯坦迷题
using System.Text;
[转]Linq 解爱因斯坦迷题
[转]Linq 解爱因斯坦迷题
namespace ConsoleApplication2

结果
[转]Linq 解爱因斯坦迷题

相关文章: