数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: Newton1983

【5月征答】爱因斯坦做过的难题

[复制链接]
发表于 2004-5-6 04:15:26 | 显示全部楼层
<>刘盾,这道题我才做过!</P><>我给你找一下!</P>
发表于 2004-5-6 04:30:42 | 显示全部楼层
前提:
1 有五栋五种颜色的房子
2 每一位房子的主人国籍都不同
3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物
4 没有人有相同的宠物,抽相同牌子的香烟,喝相同的饮料
提示:
9 挪威人住第一间房子
14 挪威人住在蓝房子旁边
8 住在中间那间房子的人喝牛奶
4 绿房子在白房子左边
5 绿房子主人喝咖啡
1 英国人住在红房子里
7 黄房子主人抽DUNHILL烟
11 养马人住在DUNHILL烟的人旁边

15 抽混合烟的人的邻居喝矿泉水
10 抽混合烟的人住在养猫人的旁边

2 瑞典人养了一条狗
3 丹麦人喝茶
6 抽PALL MALL烟的人养了一只鸟
12 抽BLUE MASTER烟的人喝啤酒
13 德国人抽PRINCE烟
问题是:
谁养鱼?

分析与解:
本题除了元素内部关联外,还有位置关系。所以排列时应该先把说明位置关系的提示排在前面。还要把有关联关系的条件排在一起。我排列的时候条件被分为三组,9、14、8、4、5、1、7、11不但可以唯一确定,而且紧密相关。大家通过这8个条件很快可以直接写出如下图:
//1 2 3 4 5
国挪//英////
颜黄蓝红绿白
饮////奶咖//
烟DU////////
宠//马//////
此后的2、3、6、12、13只存在互斥关系,不存在关联关系,所以放在最后。现在集中处理15和10这两个关联条件。
我是一次一次试的,最多试5次(如果不是正解的话,后面2、3、6、12、13镶不进图中。)运气不好,我最后一次才试成功:)
值得注意的是2、3、6、12、13的处理:大家可以把它们写成一个个模块,如图:
//1 2 3 4 5 |
国挪//英////|瑞丹////德
颜黄蓝红绿白|//////////
饮////奶咖//|//茶//酒//
烟DU////////|////PABLPR
宠//马//////|狗//鸟////
每次试15和10这两个条件时只要能把右边的“模块”镶嵌进去就行了!
正解是:
//1 2 3 4 5 |
国挪丹英德瑞|
颜黄蓝红绿白|
饮水茶奶咖酒|
烟DU混PAPRBL|
宠猫马鸟//狗|

剩下那个空位就是答案:“鱼”了!

抛砖引玉,贻笑大方!
P。S。“//”是占位的“空”!

发表于 2004-5-6 04:36:52 | 显示全部楼层
<>以上纯手工!</P><>计算机不会用!</P><>刘盾讲一下怎样用软件萨!</P>
发表于 2004-5-6 04:57:45 | 显示全部楼层
<>上面的回答的过程很好,但如果我把题改成10个条件或100个条件呢(据分析,可以出现这样的题目的。),你也手工吗?我还是觉得用计算机模拟好一些!</P>
 楼主| 发表于 2004-5-6 06:06:22 | 显示全部楼层
<>计算机的好处在于可以给出全部的可能性,当然我的编程是不敢恭维的,程序是我一个朋友写的,当然在5月底才能公布,当然希望大家能在5月底前把这个问题解决。</P><>S:大家可以把自己做过的好题拿来分享,如果的确不错,将置顶作为有奖征答。</P>
发表于 2004-5-18 20:12:05 | 显示全部楼层
<>那条街是不是直的?</P>
发表于 2004-5-19 16:53:15 | 显示全部楼层
[em01]
 楼主| 发表于 2004-5-27 18:58:00 | 显示全部楼层
<>这是网友作出的答案,仅供参考:</P><>这道迷题出自1981年柏林的德国逻辑思考学院。据说世界上只有2%的人能出答案。就连大名鼎鼎的爱因斯坦也成为此题大伤脑筋,所以这道题也经常被国内外知名公司用做面试题目,相信许多朋友都只做出过一个答案,如果碰巧你属于那98%该怎么办呢。没关系,如果这个问题用电脑来解决就非常easy了。程序代码如下: </P><>
using System;
namespace netsafe.math
{
public class ayst
{
/// &lt;summary&gt;
/// 问题中的所有元素
/// &lt;/summary&gt;
string[,] data= {{"黄房子","蓝房子","白房子","红房子","绿房子"},
{"挪威人","英国人","德国人","丹麦人","瑞典人"},
{"DUNHILL","PRINCE","混合烟", "PALL MALL","BLUE MASTER"},
{"咖 啡","矿泉水","茶","牛奶"," 啤酒 "},
{"鱼","猫","马", "鸟","狗"}};
/// &lt;summary&gt;/// answer用来存放答案
/// &lt;/summary&gt;
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&lt;=120;i1++)///房子
{
///9 、挪威人住第一间房子
///14 、挪威人住在蓝房子旁边
///不满足条件就短路
///
if (ALL[2,i1]!=2)continue;
for(int j=0;j&lt;5;j++,answer[j,1]=ALL[j,i1]);
for (i2=1;i2&lt;=120;i2++)///人种
{
for(int j=0;j&lt;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)&gt;find(1,3))continue;
for (i3=1;i3&lt;=120;i3++)///烟
{
for(int j=0;j&lt;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&lt;=120;i4++)///饮料
{
for(int j=0;j&lt;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&lt;=120;i5++)///宠物
{
for(int j=0;j&lt;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();
}
}
}
}
}
}
/// &lt;summary&gt;
/// 非常典型的用递归实现排列组合算法。
/// &lt;/summary&gt;
public void p()     
{
int nCount,nJudge,key;
nLevel++;
if(nLevel&gt;5)
{
writeall();///有一种排列就写到All数组里
nLevel--;
return;
}
for(nCount=1;nCount&lt;=5;nCount++)
{
key=0;
for(nJudge=0;nJudge&lt;=nLevel-1;nJudge++)
if(nCount==List[nJudge])
{
key=1;
break;
}
if(key==0)
{
List[nLevel]=nCount;
p();
}
}
nLevel--;
}
/// &lt;summary&gt;
/// 写入all数组
/// &lt;/summary&gt;
void writeall()
{
int i;
for (i=1;i&lt;=5;i++)
{
ALL[i,count]=List;
}
count++;
}
int find(int i,int j)
{
int k;
for(k=0;k&lt;=5;k++)
{
if (answer[k,i]==j)
{
return k;
}
}
return -1;
}
/// &lt;summary&gt;
/// 将答案打印出来
/// &lt;/summary&gt;
void write_answer()
{
for (int i = 1;i&lt;=5;i++)
{
for(int j=1 ;j&lt;=5;j++)
{
Console.Write(data[i-1,answer[j,i]-1]+",");
}
Console.WriteLine();
}
Console.WriteLine();
}
}
} </P><P>说明:程序使用目前最热门的C#语言,在Microsoft Visual Studio.net下编译执行通过。如果你没有Microsoft Visual C# 需要安装Microsoft(r) .NET Framework SDK ,把上述代码保存到ayst.cs,然后在命令行模式下执行csc ayst.cs ,然后执行ayst.exe也可以。这个程序是很久之前写的。当时只是为了得到答案,所以程序写的比较乱。让同行见笑了。以下是程序的运行结果(答案一总7种,没想到吧):
黄房子,蓝房子,红房子,绿房子,白房子,
挪威人,丹麦人,英国人,德国人,瑞典人,
DUNHILL,混合烟,PALL MALL,PRINCE,BLUE MASTER,
矿泉水,茶,牛奶,咖 啡, 啤酒 ,
鱼,马,鸟,猫,狗, </P><P>绿房子,蓝房子,黄房子,红房子,白房子,
挪威人,德国人,瑞典人,英国人,丹麦人,
混合烟,PRINCE,DUNHILL,BLUE MASTER,PALL MALL,
咖 啡,矿泉水,牛奶, 啤酒 ,茶,
猫,鱼,狗,马,鸟, </P><P>绿房子,蓝房子,白房子,黄房子,红房子,
挪威人,德国人,瑞典人,丹麦人,英国人,
PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER,
咖 啡,矿泉水,牛奶,茶, 啤酒 ,
鸟,鱼,狗,猫,马, </P><P>绿房子,蓝房子,白房子,黄房子,红房子,
挪威人,德国人,瑞典人,丹麦人,英国人,
PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER,
咖 啡,矿泉水,牛奶,茶, 啤酒 ,
鸟,猫,狗,鱼,马, </P><P>绿房子,蓝房子,白房子,红房子,黄房子,
挪威人,德国人,瑞典人,英国人,丹麦人,
PALL MALL,PRINCE,混合烟,BLUE MASTER,DUNHILL,
咖 啡,矿泉水,牛奶, 啤酒 ,茶,
鸟,鱼,狗,马,猫, </P><P>
绿房子,蓝房子,红房子,黄房子,白房子,
挪威人,德国人,英国人,丹麦人,瑞典人,
PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER,
咖 啡,矿泉水,牛奶,茶, 啤酒 ,
鸟,鱼,马,猫,狗, </P><P>绿房子,蓝房子,红房子,黄房子,白房子,
挪威人,德国人,英国人,丹麦人,瑞典人,
PALL MALL,PRINCE,混合烟,DUNHILL,BLUE MASTER,
咖 啡,矿泉水,牛奶,茶, 啤酒 ,
鸟,猫,马,鱼,狗</P>
发表于 2004-5-29 00:16:32 | 显示全部楼层
<TABLE  cellSpacing=0 cellPadding=0 border=1>

<TR >
<TD  vAlign=top width=84>
< >项目<p></p></P></TD>
<TD  vAlign=top width=82>
< ><FONT face="Times New Roman">1<p></p></FONT></P></TD>
<TD  vAlign=top width=82>
< ><FONT face="Times New Roman">2<p></p></FONT></P></TD>
<TD  vAlign=top width=80>
<P ><FONT face="Times New Roman">3<p></p></FONT></P></TD>
<TD  vAlign=top width=80>
<P ><FONT face="Times New Roman">4<p></p></FONT></P></TD>
<TD  vAlign=top width=80>
<P ><FONT face="Times New Roman">5<p></p></FONT></P></TD></TR>
<TR >
<TD  vAlign=top width=84>
<P >国别<p></p></P></TD>
<TD  vAlign=top width=82>
<P >挪威<p></p></P></TD>
<TD  vAlign=top width=82>
<P >丹麦<p></p></P></TD>
<TD  vAlign=top width=80>
<P >英国<p></p></P></TD>
<TD  vAlign=top width=80>
<P >瑞典<p></p></P></TD>
<TD  vAlign=top width=80>
<P >德国<p></p></P></TD></TR>
<TR >
<TD  vAlign=top width=84>
<P >烟名<p></p></P></TD>
<TD  vAlign=top width=82>
<P ><FONT face=宋体>Dunhill <p></p></FONT></P>
<P >香烟<p></p></P></TD>
<TD  vAlign=top width=82>
<P ><FONT face="Times New Roman">Blends<p></p></FONT></P>
<P >香烟<p></p></P></TD>
<TD  vAlign=top width=80>
<P ><FONT face="Times New Roman"><st1:place>Pall Mall</st1:place><p></p></FONT></P></TD>
<TD  vAlign=top width=80>
<P ><FONT face="Times New Roman">Blue Master<p></p></FONT></P></TD>
<TD  vAlign=top width=80>
<P ><FONT face="Times New Roman">Prince<p></p></FONT></P></TD></TR>
<TR >
<TD  vAlign=top width=84>
<P >饮料名<p></p></P></TD>
<TD  vAlign=top width=82>
<P >水<p></p></P></TD>
<TD  vAlign=top width=82>
<P >茶<p></p></P></TD>
<TD  vAlign=top width=80>
<P >牛奶<p></p></P></TD>
<TD  vAlign=top width=80>
<P >啤酒<p></p></P></TD>
<TD  vAlign=top width=80>
<P >咖啡<p></p></P></TD></TR>
<TR >
<TD  vAlign=top width=84>
<P >宠物名<p></p></P></TD>
<TD  vAlign=top width=82>
<P >猫<p></p></P></TD>
<TD  vAlign=top width=82>
<P >马<p></p></P></TD>
<TD  vAlign=top width=80>
<P >鸟<p></p></P></TD>
<TD  vAlign=top width=80>
<P >狗<p></p></P></TD>
<TD  vAlign=top width=80>
<P >鱼<p></p></P></TD></TR>
<TR >
<TD  vAlign=top width=84>
<P >房的颜色<p></p></P></TD>
<TD  vAlign=top width=82>
<P >黄色<p></p></P></TD>
<TD  vAlign=top width=82>
<P >蓝色<p></p></P></TD>
<TD  vAlign=top width=80>
<P >红色<p></p></P></TD>
<TD  vAlign=top width=80>
<P >白色<p></p></P></TD>
<TD  vAlign=top width=80>
<P >绿色<p></p></P></TD></TR></TABLE>红色的是关键
发表于 2004-5-29 07:53:00 | 显示全部楼层
<>有没有人传上一个程序啊,参考一下</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-4-26 03:19 , Processed in 0.050951 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表