查看: 14375|回复: 54

[精华] 爱因斯坦的一个问题如何用Pl/sql实现

[复制链接]
认证徽章
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2009-12-30 11:08 | 显示全部楼层 |阅读模式
爱因斯坦在20世纪初出的这个谜语。他说世界上有98%的人答不出来。

1、在一条街上,有5座房子,喷了5种颜色。 

2、每个房里住着不同国籍的人 

3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物 

问题是:谁养鱼? 

提示: 

1、英国人住红色房子 

2、瑞典人养狗 

3、丹麦人喝茶 

4、绿色房子在白色房子左面 

5、绿色房子主人喝咖啡 

6、抽Pall Mall 香烟的人养鸟 

7、黄色房子主人抽Dunhill 香烟 

8、住在中间房子的人喝牛奶 

9、 挪威人住第一间房 

10、抽Blends香烟的人住在养猫的人隔壁 

11、养马的人住抽Dunhill 香烟的人隔壁 

12、抽Blue Master的人喝啤酒 

13、德国人抽Prince香烟 

14、挪威人住蓝色房子隔壁 

15、抽Blends香烟的人有一个喝水的邻居 


有能力的请给出答案


这个问题,很经典,不知道有没有朋友用Pl/sql或存储过程解过,有没有兴趣挑战一把。
论坛徽章:
90
生肖徽章:蛇
日期:2006-09-07 17:09:082011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:34现任管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09
发表于 2009-12-30 11:15 | 显示全部楼层
这个有做过了吧

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2009-12-30 11:16 | 显示全部楼层

回复 #2 jackywood 的帖子

看到过

使用道具 举报

回复
认证徽章
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
发表于 2009-12-30 11:20 | 显示全部楼层
有一个t-sql的解法:
http://www.cnblogs.com/skyiv/articles/1264119.html

凑空我整理一个pl/sql的,也许比它更简化。

使用道具 举报

回复
论坛徽章:
90
生肖徽章:蛇
日期:2006-09-07 17:09:082011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:43:34现任管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:50:442012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09
发表于 2009-12-30 13:51 | 显示全部楼层

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2009-12-30 14:54 | 显示全部楼层
只有房子有顺序
编成1-5的号

使用道具 举报

回复
招聘 : 数据工程师
论坛徽章:
92
生肖徽章2007版:鸡
日期:2013-11-12 07:55:03马上有房
日期:2014-02-18 16:42:02马上有钱
日期:2014-04-09 17:17:412014年世界杯参赛球队: 美国
日期:2014-06-28 21:46:122014年世界杯参赛球队:喀麦隆
日期:2014-07-07 10:46:48马上有车
日期:2014-07-21 13:04:39马上加薪
日期:2014-07-29 10:04:19马上有对象
日期:2014-07-29 10:04:53马上有车
日期:2014-07-29 10:04:20马上加薪
日期:2014-08-26 22:26:06
发表于 2009-12-30 15:19 | 显示全部楼层
做笛卡尔积,然后筛选

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2009-12-30 15:33 | 显示全部楼层
1,14=>blue 2,4,1=>red 3 green 4 while 5 or green 3 white 4 red 5,7=>yellow 1

使用道具 举报

回复
求职 : 数据库开发
认证徽章
论坛徽章:
28
ITPUB学员
日期:2009-10-14 18:49:45至尊黑钻
日期:2015-12-31 11:11:56数据库板块每日发贴之星
日期:2009-10-22 01:01:02优秀写手
日期:2014-04-30 06:00:17ITPUB8周年纪念徽章
日期:2009-10-09 21:30:10马上有车
日期:2014-10-09 10:14:53马上有钱
日期:2014-02-18 16:43:09路虎
日期:2013-10-15 15:38:59林肯
日期:2013-09-12 15:57:33ITPUB 11周年纪念徽章
日期:2012-10-09 18:11:48
发表于 2009-12-30 18:00 | 显示全部楼层
原帖由 〇〇 于 2009-12-30 14:54 发表
只有房子有顺序
编成1-5的号


参考jackwood的解法,然后用这个编号的方法做,结果出了问题。。不知道哪里写的有问题


SELECT distinct nationality,color,beverages,cigarettes,pets FROM(
     with
     class_number as(
          SELECT 1 as num FROM dual
          union all
          SELECT 2 FROM dual
          union all
          SELECT 3 FROM dual
          union all
          SELECT 4 FROM dual
          union all
          SELECT 5 FROM dual
     ),
     class_nationality as (
          SELECT '英国人' as nationality FROM dual
          union all
          SELECT '瑞典人' FROM dual
          union all
          SELECT '丹麦人' FROM dual
          union all
          SELECT '挪威人' FROM dual
          union all
          SELECT '德国人' FROM dual
     ),
     class_house as(
          SELECT '红色' as color FROM dual
          union all
          SELECT '白色' FROM dual
          union all
          SELECT '绿色' FROM dual
          union all
          SELECT '黄色' FROM dual
          union all
          SELECT '蓝色' FROM dual
     ),
     class_beverages as(
          SELECT '茶' as beverages FROM dual
          union all
          SELECT '咖啡' FROM dual
          union all
          SELECT '牛奶' FROM dual
          union all
          SELECT '啤酒' FROM dual
          union all
          SELECT '水' FROM dual
     ),
     class_cigarettes as(
          SELECT 'pall mall' as cigarettes FROM dual
          union all
          SELECT 'dunhill' FROM dual
          union all
          SELECT 'blends' FROM dual
          union all
          SELECT 'blue master' FROM dual
          union all
          SELECT 'prince' FROM dual
     ),
     class_pets as(
          SELECT '狗' as pets FROM dual
          union all
          SELECT '鸟' FROM dual
          union all
          SELECT '猫' FROM dual
          union all
          SELECT '马' FROM dual
          union all
          SELECT '鱼' FROM dual
     )
     SELECT *
     FROM class_number,
          class_nationality,
          class_house,
          class_beverages,
          class_cigarettes,
          class_pets
     WHERE
          --英国人住红色房子
     
     color = decode(nationality,'英国人','红色',color)
          AND nationality = decode(color,'红色','英国人',nationality)
          --瑞典人养狗
     
     AND pets = decode(nationality,'瑞典人','狗',pets)
          AND nationality = decode(pets,'狗','瑞典人',nationality)
          --丹麦人喝茶
     
     AND beverages = decode(nationality,'丹麦人','茶',beverages)
          AND nationality = decode(beverages,'茶','丹麦人',nationality)
          --绿色房子在白色房子左面
     
     AND decode(color,'绿色',num,10) = decode(color,'白色',num,11) - 1
          --绿色房子主人喝咖啡
          AND beverages = decode(color,'绿色','咖啡',beverages)
          AND color = decode(beverages,'咖啡','绿色',color)
          --抽Pall Mall 香烟的人养鸟
     
     AND pets = decode(cigarettes,'pall mall','鸟',pets)
          AND cigarettes = decode(pets,'鸟','pall mall',cigarettes)
          --黄色房子主人抽Dunhill 香烟
     
     AND cigarettes = decode(color,'黄色','dunhill',cigarettes)
          AND color = decode(cigarettes,'dunhill','黄色',color)
          --住在中间房子的人喝牛奶
     
     AND beverages = decode(num,3,'牛奶',beverages)
          AND num = decode(beverages,'牛奶',3,num)
          --挪威人住第一间房
     
     AND num = decode(nationality,'挪威人',1,num)
          AND nationality = decode(num,1,'挪威人',nationality)
          --抽Blends香烟的人住在养猫的人隔壁
     
     AND decode(cigarettes,'blends',num,10) in (decode(pets,'猫',num,11) - 1, decode(pets,'猫',num,9) + 1)
          --养马的人住抽Dunhill 香烟的人隔壁
     
     AND decode(pets,'马',num,10) in (decode(cigarettes,'dunhill',num,11)-1,decode(cigarettes,'dunhill',num,9) + 1)
          --抽Blue Master的人喝啤酒
     
     AND beverages = decode(cigarettes,'blue master','啤酒',beverages)
          AND cigarettes = decode(beverages,'啤酒','blue master',cigarettes)
          --德国人抽Prince香烟
          AND cigarettes = decode(nationality,'德国人','prince',cigarettes)
          AND nationality = decode(cigarettes,'prince','德国人',nationality)
          --挪威人住蓝色房子隔壁
          AND decode(nationality,'挪威人',num,10) in (decode(color,'蓝',num,11) - 1,decode(color,'蓝',num,9) + 1)
          --抽Blends香烟的人有一个喝水的邻居
     
     AND decode(cigarettes,'blends',num,10) in (decode(beverages,'水',num,11) - 1,decode(beverages,'水',num,9) + 1)
)

[ 本帖最后由 风铃中の鬼 于 2009-12-30 18:05 编辑 ]

使用道具 举报

回复
论坛徽章:
530
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2009-12-30 23:04 | 显示全部楼层
这论坛聚集了世界上2%的人口?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表