用人工智能工具轻松解决爱因斯坦智力题

现有题号称爱因斯坦出的智力题全世界只有2%能够做出。

  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香烟的人有一个喝水的邻居

  为了便于消除翻译的误差,先将英文版本贴出(点击查看附件)

  现在请你用c#写出解这个问题的程序!

  相信不少人对此题的第一个想法是通过暴力算法穷举所有可能让计算机进行求解。如果是这样那么你不用辛苦了,下面早就有人这么干过了:
  暴力算法解益智题[c#2.0版本](点击查看附件)
  C#法解决世纪迷题(点击查看附件)

  这些解法虽然都是对的,但是正如有人评论道:用笔解这题时候可比用程序看起来省力多了...算的上“轻松”吗?在这里向大家推荐人工智能工具NSolver (BY DR.Andy Chun, Hon Wai)。

http://ike.126.com

用NSolver如何解决问题?

  先举一个简单的例子:

  IQ 题:
  农场里有兔子和鸡若干只,知道共20个头和56条腿。问兔子和鸡各多少只?

  用c#来解这个问题,可能是:

using System;
public class Rabbit
{
public int rabbit = 0;
public int pheasant = 0;
public void Run()
{
for (rabbit = 0; rabbit<=20; rabbit++)
for (pheasant = 0; pheasant<=20; pheasant++)
if (rabbit+pheasant==20
&& rabbit*4+pheasant*2==56)
Console.WriteLine(
"Rabbit["+rabbit+"] Pheasant["+pheasant+"]");
}
public static void Main() {(new Rabbit()).Run();}
}


  有什么不足?

  1、没有变量/未知量的概念
  2、没有什么值合法什么不合法的概念(问题域)
  3、没有变量间的关系/约束概念
  4、所有都Hardcode了,不能扩展到更复杂的问题
  5、暴力破解穷举

比较一下NSolver的解法:

using ai.net.Solver;
using System;
public class Rabbit : Solver
{
public Var rabbits, pheasants;
public void Run()
{
rabbits = var(0, 20, "Rabbits");
pheasants = var(0, 20, "Pheasants");
Post(rabbits.Sum(pheasants).Eq(20));
Post(rabbits.Prod(4).Sum(pheasants.Prod(2)).Eq(56));
Console.WriteLine(rabbits+" "+pheasants);
}
public static void Main() {(new Rabbit()).Run();}
}


  现在用NSolver解决爱因斯坦问题(点击查看附件)  [如有乱码,请点击浏览器工具栏"查看"-"编码"-"简体中文"]

  看看这代码,简洁易懂! 现在你要做的就是陈述问题,NSolver帮你做剩下的!

  延伸阅读
  http://sc.info.gov.hk/gb/www.ugc.edu.hk/rgc/rgcnews9/Pages/6%20AI-C.html

  NSolver的好处就是,它不仅仅能解决这个爱因斯坦的问题,它所能解决的是属于一个叫做“Constraint Satisfaction Problems”的一大堆问题。

更多文章请点击左边的“文章”和“存档”分类

文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爱因斯坦阶梯编程题是一个经典的编程问题,涉及到C语言的使用。现在,我将用300字来回答这个问题。 在爱因斯坦阶梯编程题中,我们需要根据一些条件来确定背包中不同物体的重量,以及物体之间的关系。根据题目给出的信息,我们可以得出以下结论: 1. 有5个人,他们分别是:爱因斯坦、亚里士多德、阿基米德、笛卡尔、牛顿。他们的职业分别是:物理学家、哲学家、数学家、哲学家、物理学家。 2. 到达顶端之前,只有两个人可以站在阶梯上,并且总是站在爱因斯坦的前面。 3. 笛卡尔的重量比爱因斯坦的轻,但是比数学家的重量要重。 4. 物理学家的重量最重,他的身高比其他所有人都高。 根据以上信息,我们可以得出以下答案: 1. 爱因斯坦是物理学家,且他站在阶梯中间,所以他是第三个上到顶端的人。 2. 由于爱因斯坦的前面只有两个人,所以在他前面的人只能是亚里士多德和阿基米德。 3. 笛卡尔的重量比爱因斯坦轻,但是比数学家重,所以他不能是第一个上到顶端的人。 4. 物理学家的重量最重,所以他不能是最轻的人。 综上所述,根据题目给出的条件,正确的答案是:亚里士多德、阿基米德、爱因斯坦、笛卡尔、牛顿。他们的职业分别是:哲学家、数学家、物理学家、哲学家、物理学家。 以上就是爱因斯坦阶梯编程题的回答。在实际编程中,我们可以使用C语言来实现相关逻辑,通过判断和比较来得到最终的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值