C语言编程快速解决爱因斯坦谜题

本文介绍了如何运用C语言编程快速解决爱因斯坦谜题,从暴力解法到优化策略,包括数学推理思路,程序设计的优化过程,以及通过编程解决此类问题的反思。
摘要由CSDN通过智能技术生成

C语言编程快速解决爱因斯坦谜题

2012年7月15日

1      问题简介

爱因斯坦谜题(Einstein'sriddle)是很多人熟悉的问题。记得读高中时候就有同学就拿这个题目来考人,不过那时的解法主要是数学推理和逻辑判断,现在学习了编程技术后,自己再尝试使用计算机来协助解决这个问题,又是另一种不同的感受。

--------------------------------------------------------------------------------------------------------------------------------------

源码链接:https://einsteinriddle.googlecode.com/files/EinsteinRiddle.rar

SVN检出:svn checkout http://einsteinriddle.googlecode.com/svn/trunk/ einsteinriddle-read-only

-------------------------------------------------------------------------------------------------------------------------------------


1.1    谜题内容

爱因斯坦在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香烟的人有一个喝水的邻居

以上是爱因斯坦在20世纪初出的这个谜语。他说世界上有98%的人答不出来

1.2     数学推理思路

这里顺便讲解一下运用数学推理解决此问题的方法,已经了解过的人可以跳过此部分,直接关注编程解决章节。

基本解决思路(类似数独游戏的填充过程):

1)        可以绘制一份5X5的表格来表示这25种属性。

2)        根据条件8、条件9、条件14可以确定出三个格子的内容。

属性

房子1

房子2

房子3

房子4

房子5

颜色

 

蓝色

     

国籍

挪威

       

饮料

   

牛奶

   

香烟

         

宠物

         

3)        根据条件5,绿色房子的主人喜欢喝咖啡,断定该条件只能使用房子1、4、5;根据条件4,绿色的房子在白色的房子紧邻的左边,那么可以推断出房子5是白色、 4是绿色;而红色房子住的英国人,该条件只能满足房子3;剩下的房子1必然是黄色的,而根据条件7黄色房子主人抽Dunhill香烟,可确定起香烟属性。

如图所示:

属性

房子1

房子2

房子3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值