您的位置:

谁养鱼c语言的简单介绍

本文目录一览:

爱因斯坦的2%人做得出那题目有几种答案!?

2%?开玩笑。。。

详尽的推导如下

首先,利用房子突破

根据9,挪威人住第一间,

14挪威人旁边是蓝色房子,得到,蓝色房子是第二间

再根据4绿色在白色房子左边,绿色和白色都不可能是第一间。

根据1,英国人是红色,则红色也不是第一间。那么只剩下黄色是第一间。

再根据4绿色在白色左边,那么中间的房间只可能是绿色和红色中的一个,

但是5绿色喝咖啡,8中间喝牛奶,证明中间不是绿色,那就必然是红色咯,

好,至此,房子顺序确定,为黄,蓝,红,绿白

而且我们知道,第一间是挪威人,抽Dunhill(7),第二间的人养马(11),第三间是英国人,喝牛奶,第四间的人喝咖啡(5)。

至此还能对我们有帮助的条件就只剩下

2 3 6 10 12 13 15

好,根据3丹麦人喝茶,丹麦人必然只能是2号或者5号(因为1是挪威人,3,4喝的都不是茶)

根据12抽Blue Master的人喝啤酒,他必然只能是2号或者5号(1号抽Dunhill,34喝的不是啤酒)

那么,2号和5号必然一个喝啤酒一个和茶,剩下的喝水,就只能是1号了。

根据15,可知2号抽Blends烟,那么喝啤酒抽BM烟(条件12描述)的人只能是5号了

那么丹麦人喝茶,抽Blends,养马,住第二间蓝色,确定。

好,至此,饮料的问题解决了

再根据13,德国人抽Prince,只能是4号,因为125号的烟已经知道了,而三号是英国人。所以最后剩下的5号就是瑞典人,国籍解决,剩下的3号抽Pall Mall,烟草解决

由6,pall Mall养鸟,则3号浮出水面,中间房子,红色,英国人,养鸟,喝奶,抽Pall Mall

再根据2, 5号人物确定,最后一间房,白色,瑞典人,啤酒,养狗,抽Blue Master。

再根据10,明显2号隔壁养猫,而三号不养猫,则1号养猫,1号,黄色,挪威人,喝水,养猫,抽Dunhill。最后剩下的就是4号,德国人,绿色房子,喝咖啡,抽Prince,养鱼。

以上推导,步步严密,不存在第二种可能,所以答案唯一,就是德国人,不存在第二种可能。

本题只有一个答案,lz的丹麦肯定错了

使用计算机穷举法解决这个题目。刚刚经过6610秒的程序运行,完成了穷举。事实是,根据穷举法的结果,在所有120*120*120*120*120种可能(每一项都是5种的全排列)里面,只有一种可能满足题目要求。根本找不到第二种答案。强烈要求楼主将自己的丹麦的答案细节发出!

源程序:(C语言)

#include stdio.h

void printls(int s[5][5])

{

FILE *pout;

int i,j;

pout=fopen("res.txt","w+");

for(i=0;i5;i++)

{

for(j=0;j5;j++)

{

printf("%d ",s[i][j]);

fprintf(pout,"%d ",s[i][j]);

}

printf("\n");

fprintf(pout,"\n");

}

fclose(pout);

}

int check(int s[5][5])

{

int i,j;

//1

for(i=0;i5;i++){if(s[i][0]==0)break;}

if(s[i][1]!=0)return 0;

//2

for(i=0;i5;i++){if(s[i][1]==4)break;}

if(s[i][4]!=2)return 0;

//3

for(i=0;i5;i++){if(s[i][1]==3)break;}

if(s[i][2]!=2)return 0;

//4

for(i=0;i5;i++){if(s[i][0]==3)break;}

if(i==4)return 0;

if(s[i+1][0]!=2)return 0;

//5

if(s[i][2]!=4)return 0;

//6

for(i=0;i5;i++){if(s[i][3]==2)break;}

if(s[i][4]!=1)return 0;

//7

for(i=0;i5;i++){if(s[i][0]==1)break;}

if(s[i][3]!=3)return 0;

//8

if(s[2][2]!=1)return 0;

//9

if(s[0][1]!=1)return 0;

//10

for(i=0;i5;i++){if(s[i][3]==0)break;}

if(i==0){if(s[1][4]!=3)return 0;}

else if(i==4){if(s[3][4]!=3)return 0;}

else {if((s[i+1][4]!=3)(s[i-1][4]!=3))return 0;}

//11

for(i=0;i5;i++){if(s[i][4]==0)break;}

if(i==0){if(s[1][3]!=3)return 0;}

else if(i==4){if(s[3][3]!=3)return 0;}

else {if((s[i+1][3]!=3)(s[i-1][3]!=3))return 0;}

//12

for(i=0;i5;i++){if(s[i][3]==1)break;}

if(s[i][2]!=0)return 0;

//13

for(i=0;i5;i++){if(s[i][1]==2)break;}

if(s[i][3]!=4)return 0;

//14

for(i=0;i5;i++){if(s[i][1]==1)break;}

if(i==0){if(s[1][0]!=4)return 0;}

else if(i==4){if(s[3][0]!=4)return 0;}

else {if((s[i+1][0]!=4)(s[i-1][0]!=4))return 0;}

//15

for(i=0;i5;i++){if(s[i][3]==0)break;}

if(i==0){if(s[1][2]!=3)return 0;}

else if(i==4){if(s[3][2]!=3)return 0;}

else {if((s[i+1][2]!=3)(s[i-1][2]!=3))return 0;}

//if right

printls(s);

printf("\n");

return 1;

}

int main()

{

int s[5][5],i,j,k,l,m,n,p[121][5],o;

o = 0;

i = 0;

for(p[i][0]=0;p[i][0]5;p[i][0]++)

{

for(p[i][1]=0;p[i][1]5;p[i][1]++)

{

for(p[i][2]=0;p[i][2]5;p[i][2]++)

{

for(p[i][3]=0;p[i][3]5;p[i][3]++)

{

for(p[i][4]=0;p[i][4]5;p[i][4]++)

{

if(p[i][0]==p[i][1])continue;

if(p[i][0]==p[i][2])continue;

if(p[i][0]==p[i][3])continue;

if(p[i][0]==p[i][4])continue;

if(p[i][1]==p[i][2])continue;

if(p[i][1]==p[i][3])continue;

if(p[i][1]==p[i][4])continue;

if(p[i][2]==p[i][3])continue;

if(p[i][2]==p[i][4])continue;

if(p[i][3]==p[i][4])continue;

printf("%d %d %d %d %d\n",p[i][0],p[i][1],p[i][2],p[i][3],p[i][4]);

i++;

printf("%d\n",i);

if(i==120)break;

for(j=0;j5;j++)p[i][j]=p[i-1][j];

}if(i==120)break;

}if(i==120)break;

}if(i==120)break;

}if(i==120)break;

}

printf("%d\n",i);

for(i=0;i120;i++)

{

for(j=0;j120;j++)

{

for(k=0;k120;k++)

{

for(l=0;l120;l++)

{

for(m=0;m120;m++)

{

for(n=0;n5;n++)

{

s[n][0]=p[i][n];

}

for(n=0;n5;n++)

{

s[n][1]=p[j][n];

}

for(n=0;n5;n++)

{

s[n][2]=p[k][n];

}

for(n=0;n5;n++)

{

s[n][3]=p[l][n];

}

for(n=0;n5;n++)

{

s[n][4]=p[m][n];

}

o+= check(s);

}

}

}

printf("%d %d %d\n",i,j,o);

}

}

printf("%d end\n",o);

return 0;

}

其中用到的代码列表:

0 1 2 3 4

红色 黄色 白色 绿色 蓝色 0

英国 挪威 德国 丹麦 瑞典 1

啤酒 牛奶 茶 水 咖啡 2

Blen Blue Pall Dunh Prin 3

马 鸟 狗 猫 鱼 4

就是说数组s[i][j]每个i代表一个位置,每个j代表一种事物,具体代表什么可以查上面这个表。例如s[2][3]=4就代表中间那所房子(s[i][j]的i=2,所以房子号是第三个,就是中间的)里面的人抽的烟(s[i][j]中j=3,就是对应上表中最后标3的那行)是prince(标3的那行标4的那列是prince),再例如s[1][0]=2就代表第二座房子是白色的。

程序运行结果:

1 end (代表o=1,就是只找到一个解)

return code 0

Execution time 6609.68 seconds

文件输出的结果:

1 1 3 3 3

4 3 2 0 0

0 0 1 2 1

3 2 4 4 4

2 4 0 1 2

按照上面的表格给出翻译为

第一所房子 黄色 挪威 水 Dunhill 猫

第二所房子 蓝色 丹麦 茶 Blends 马

第三所房子 红色 英国 牛奶 PallMall 鸟

第四所房子 绿色 德国 咖啡 Prince 鱼

第五所房子 白色 瑞典 啤酒 BlueMast 狗

这次是程序穷举法验证,不知道楼主还有什么可说的。。。如果您真的找到第二种答案,把它的细节列表发出来,大家看一看啊

爱因斯坦智商测试,请用C语言编程解决问题。

问:邻居这个问题出自爱因斯坦,据他说,98%的人都做不出来。

有一排五间房子,每一间房子的颜色都不同。在这些房子里住着五个不同国籍的人。每个人喂养了不同的动物,喜欢不同的饮料,抽不同的雪茄。

英国人住在红色房子里。

瑞典人养狗。

丹麦人喝茶。

绿色的房子在白色房子的左边。

绿色房子的主人喜欢喝咖啡。

抽“坡魔”牌雪茄的人养鸟。

黄色房子的主人抽“顿山”牌雪茄。

住在中间房子的人喝牛奶。

挪威人住在第一间房子。

抽“波兰斯”牌雪茄的人住在养猫的人旁边。

养马的人住在抽“顿山”牌雪茄的人旁边。

抽“蓝领”牌雪茄的人喝啤酒。

德国人抽“王子”牌雪茄。

挪威人住在蓝色房子旁边。

抽“波兰斯”牌雪茄的人有一个喝水的邻居。谁家养鱼?

你是那2%的人吗?

分析过程:

首先我们可以知道挪威人在1号房子 喝牛奶的人在3号房子

《挪威人住在蓝色房子旁边。》

1号挪威人旁边只有一个房子 所以2号房子是蓝色

《绿色的房子在白色房子的左边。

绿色房子的主人喜欢喝咖啡》

此问题可以让我们知道如果1号是绿那么2号就是白但是2号是蓝色

如果3号是绿色也不行 因为绿色房间的人喝咖啡 但3号喝牛奶

所以只有4号是绿色5号是白色就可以说得通了 (注意!就此地可以改所有的答案,这里没说绿色在白色的隔壁,这只是爱因斯坦的陷阱,其实有两种答案,我们假设是隔壁,这是一种)

《英国人住在红色房子里。》现在没颜色的只有1号和3号怎么知道谁是红色呢?很简单 就是看国籍1号是挪威人不是英国人 那3号

房子就是红色主人是英国人 1号是黄色房间

1 2 3 4 5

挪威人 英国

红色 蓝色 黄色 绿色 白色

牛奶 咖啡

就下来有一个明显的信息 就是《黄色房子的主人抽“顿山”牌雪茄。》

1号是红色房间那么他抽顿山 接下来有一个像《挪威人住在蓝色房子旁边。》的问题就是《养马的人住在抽“顿山”牌雪茄的人旁边》

这个也很简单 就是红色房间是1号 他只有一个邻居就是2号

所以2号养马

1 2 3 4 5

挪威人 英国

红色 蓝色 黄色 绿色 白色

牛奶 咖啡

顿山

接下来才到了爱因斯坦说过的《98%人做不出》的难度了

我们先把一个可以知道的信息找出来就是

丹麦人喝茶。

抽“波兰斯”牌雪茄的人有一个喝水的邻居。

抽“蓝领”牌雪茄的人喝啤酒

这三个问题中都有水 我们先看看它们每个都是几号房子的人要喝

丹麦人可能是2 4 5号房子 因为他喝茶所以可以排除4号 那丹麦就是2 5号房中的一个

1号不抽波兰斯 可以排除(排除他不是抽波兰斯 但它可能是喝水的)5号的邻居(4号)喝咖啡可以排除(4号)3号又喝牛奶所以喝水的人可能是1 2 5号房间中的一个

1号不抽蓝领可以排除 3号喝牛奶可以排除 4号喝咖啡可以排除所以喝啤酒的人可能是2 5号

1 5 2号可能喝水

2 5号可能喝茶

2 5号可能喝啤酒

这一点要注意了 喝水的只能是1号 因为大家想想 如果5号喝水2号喝茶 要是这样的话啤酒就谁喝呢?1号?不可能因为已经被排除了 如果2号喝水也一样 所以1号喝水

1 2 3 4 5

挪威人 英国

红色 蓝色 黄色 绿色 白色

水 牛奶 咖啡

顿山

接下来我们分析《抽“波兰斯”牌雪茄的人有一个喝水的邻居。》

1号喝水 那么他只有一个邻居 就是2号 所以2号抽波兰斯

1 2 3 4 5

挪威人 英国

红色 蓝色 黄色 绿色 白色

水 牛奶 咖啡

顿山 波兰斯

用同样的方法排除:

抽“蓝领”牌雪茄的人喝啤酒

德国人抽“王子”牌雪茄

抽“坡魔”牌雪茄的人养鸟。

首先我们看蓝领 1号抽烟喝水 那不是他 2号抽波兰斯 不是他

3号喝牛奶也不是 4号喝咖啡也一样 只有5号的人可以说得通

现在是德国人的 1号是挪威人抽顿山 不是 2号波兰斯 不是

3号是英国人 不是 5号抽蓝领也不是 所以只有4号说得通

《抽“坡魔”牌雪茄的人养鸟》现在这个不用分析了 因为只有3号要抽的烟还没找到所以只有他抽坡魔了 并且养鸟

1 2 3 4 5

挪威 英国 德国

红色 蓝色 黄色 绿色 白色

水 牛奶 咖啡 啤酒

马 鸟

顿山 波兰斯 坡魔 王子 蓝领

《抽“波兰斯”牌雪茄的人住在养猫的人旁边》

2号抽波兰斯 他又两个邻居 一个是1号一个是3号 3号养鸟 所以不是他 那只有1号了

《瑞典人养狗。》

1号养猫的挪威人不可能 2号养马 不是 3号英国人养鸟不是

4号德国人 也不是 就只有5号是瑞典人了 那2号是丹麦人喝茶

就剩下一个4号没养宠物了 那么他当然是养 鱼

1 2 3 4 5

挪威 丹麦 英国 德国 瑞典

红色 蓝色 黄色 绿色 白色

水 茶 牛奶 咖啡 啤酒

猫 马 鸟 鱼 狗

顿山 波兰斯 坡魔 王子 蓝领

楼主我发誓这是我亲手写的!!!!!! 求最佳!!!!!

爱因斯坦出了一道题,他说世界上有90%的人回答不出,看看你是否属于10%。

呵呵,很典型的一个计算机推理题,有类似的程序,看看这个对你有启发,这个是一个钓鱼的推断程序:

/** 这道迷题出自1981年柏林的德国逻辑思考学院

* 原题为:

1.有5栋5种颜色的房子

2.每一位房子的主人国籍都不同

3.这五个人每人只喝一个牌子的饮料,只抽一个牌子的香烟,只养一种宠物

4.没有人有相同的宠物,抽相同牌子的烟,喝相同牌子的饮料

已知条件:

1.英国人住在红房子里

2.瑞典人养了一条狗

3.丹麦人喝茶

4.绿房子在白房子的左边

5.绿房子主人喝咖啡

6.抽pallmall烟的人养了一只鸟

7.黄房子主人抽dunhill烟

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

9.挪威人住在第一间房子

10.抽混合烟的人住在养猫人的旁边

11.养马人住在抽dunhill烟人的旁边

12.抽bluemaster烟的人喝啤酒

13.德国人抽prince烟

14.挪威人住在蓝房子旁边

15.抽混合烟的人的邻居喝矿泉水

问题:谁养鱼?

据说世界上只有2%的人能出答案。

就连大名鼎鼎的爱因斯坦也成为此题大伤脑筋。

*/

/*

* @author cds

*

* TODO To change the template for this generated type comment go to Window -

* Preferences - Java - Code Style - Code Templates

*/

public class WhoFeedsFish {

public static final int NATIONALITY_ENGLISH = 1;

public static final int NATIONALITY_SWIDISH = 2;

public static final int NATIONALITY_DAMARK = 3;

public static final int NATIONALITY_NORWAY = 4;

public static final int NATIONALITY_GERMAN = 5;

private int[] nationalities = { 1, 2, 3, 4, 5 };

public static final int COLOR_RED = 1;

public static final int COLOR_GREEN = 2;

public static final int COLOR_YELLOW = 3;

public static final int COLOR_WHITE = 4;

public static final int COLOR_BLUE = 5;

private int[] colors = { 1, 2, 3, 4, 5 };

public static final int PET_DOG = 1;

public static final int PET_BIRD = 2;

public static final int PET_CAT = 3;

public static final int PET_HORSE = 4;

public static final int PET_FISH = 5;

private int[] pets = { 1, 2, 3, 4, 5 };

public static final int DRINK_TEA = 1;

public static final int DRINK_COFFEE = 2;

public static final int DRINK_MILK = 3;

public static final int DRINK_BEER = 4;

public static final int DRINK_WATER = 5;

private int[] drinks = { 1, 2, 3, 4, 5 };

public static final int TOBACCO_PALLMALL = 1;

public static final int TOBACCO_DUNHILL = 2;

public static final int TOBACCO_BLUEMASTER = 3;

public static final int TOBACCO_PRINCE = 4;

public static final int TOBACCO_MIXED = 5;

private int[] tobaccoes = { 1, 2, 3, 4, 5 };

private int[][] key = { nationalities, colors, pets, drinks, tobaccoes };

private int[][] values = { { 1, 2, 3, 4, 5 }, { 1, 2, 3, 5, 4 },

{ 1, 2, 4, 3, 5 }, { 1, 2, 4, 5, 3 }, { 1, 2, 5, 3, 4 },

{ 1, 2, 5, 4, 3 }, { 1, 3, 2, 4, 5 }, { 1, 3, 2, 5, 4 },

{ 1, 3, 4, 2, 5 }, { 1, 3, 4, 5, 2 }, { 1, 3, 5, 2, 4 },

{ 1, 3, 5, 4, 2 }, { 1, 4, 2, 3, 5 }, { 1, 4, 2, 5, 3 },

{ 1, 4, 3, 2, 5 }, { 1, 4, 3, 5, 2 }, { 1, 4, 5, 2, 3 },

{ 1, 4, 5, 3, 2 }, { 1, 5, 2, 3, 4 }, { 1, 5, 2, 4, 3 },

{ 1, 5, 3, 2, 4 }, { 1, 5, 3, 4, 2 }, { 1, 5, 4, 2, 3 },

{ 1, 5, 4, 3, 2 }, { 2, 1, 3, 4, 5 }, { 2, 1, 3, 5, 4 },

{ 2, 1, 4, 3, 5 }, { 2, 1, 4, 5, 3 }, { 2, 1, 5, 3, 4 },

{ 2, 1, 5, 4, 3 }, { 2, 3, 1, 4, 5 }, { 2, 3, 1, 5, 4 },

{ 2, 3, 4, 1, 5 }, { 2, 3, 4, 5, 1 }, { 2, 3, 5, 1, 4 },

{ 2, 3, 5, 4, 1 }, { 2, 4, 1, 3, 5 }, { 2, 4, 1, 5, 3 },

{ 2, 4, 3, 1, 5 }, { 2, 4, 3, 5, 1 }, { 2, 4, 5, 1, 3 },

{ 2, 4, 5, 3, 1 }, { 2, 5, 1, 3, 4 }, { 2, 5, 1, 4, 3 },

{ 2, 5, 3, 1, 4 }, { 2, 5, 3, 4, 1 }, { 2, 5, 4, 1, 3 },

{ 2, 5, 4, 3, 1 }, { 3, 1, 2, 4, 5 }, { 3, 1, 2, 5, 4 },

{ 3, 1, 4, 2, 5 }, { 3, 1, 4, 5, 2 }, { 3, 1, 5, 2, 4 },

{ 3, 1, 5, 4, 2 }, { 3, 2, 1, 4, 5 }, { 3, 2, 1, 5, 4 },

{ 3, 2, 4, 1, 5 }, { 3, 2, 4, 5, 1 }, { 3, 2, 5, 1, 4 },

{ 3, 2, 5, 4, 1 }, { 3, 4, 1, 2, 5 }, { 3, 4, 1, 5, 2 },

{ 3, 4, 2, 1, 5 }, { 3, 4, 2, 5, 1 }, { 3, 4, 5, 1, 2 },

{ 3, 4, 5, 2, 1 }, { 3, 5, 1, 2, 4 }, { 3, 5, 1, 4, 2 },

{ 3, 5, 2, 1, 4 }, { 3, 5, 2, 4, 1 }, { 3, 5, 4, 1, 2 },

{ 3, 5, 4, 2, 1 }, { 4, 1, 2, 3, 5 }, { 4, 1, 2, 5, 3 },

{ 4, 1, 3, 2, 5 }, { 4, 1, 3, 5, 2 }, { 4, 1, 5, 2, 3 },

{ 4, 1, 5, 3, 2 }, { 4, 2, 1, 3, 5 }, { 4, 2, 1, 5, 3 },

{ 4, 2, 3, 1, 5 }, { 4, 2, 3, 5, 1 }, { 4, 2, 5, 1, 3 },

{ 4, 2, 5, 3, 1 }, { 4, 3, 1, 2, 5 }, { 4, 3, 1, 5, 2 },

{ 4, 3, 2, 1, 5 }, { 4, 3, 2, 5, 1 }, { 4, 3, 5, 1, 2 },

{ 4, 3, 5, 2, 1 }, { 4, 5, 1, 2, 3 }, { 4, 5, 1, 3, 2 },

{ 4, 5, 2, 1, 3 }, { 4, 5, 2, 3, 1 }, { 4, 5, 3, 1, 2 },

{ 4, 5, 3, 2, 1 }, { 5, 1, 2, 3, 4 }, { 5, 1, 2, 4, 3 },

{ 5, 1, 3, 2, 4 }, { 5, 1, 3, 4, 2 }, { 5, 1, 4, 2, 3 },

{ 5, 1, 4, 3, 2 }, { 5, 2, 1, 3, 4 }, { 5, 2, 1, 4, 3 },

{ 5, 2, 3, 1, 4 }, { 5, 2, 3, 4, 1 }, { 5, 2, 4, 1, 3 },

{ 5, 2, 4, 3, 1 }, { 5, 3, 1, 2, 4 }, { 5, 3, 1, 4, 2 },

{ 5, 3, 2, 1, 4 }, { 5, 3, 2, 4, 1 }, { 5, 3, 4, 1, 2 },

{ 5, 3, 4, 2, 1 }, { 5, 4, 1, 2, 3 }, { 5, 4, 1, 3, 2 },

{ 5, 4, 2, 1, 3 }, { 5, 4, 2, 3, 1 }, { 5, 4, 3, 1, 2 },

{ 5, 4, 3, 2, 1 } };

public void printKey() {

for (int i = 0; i 5; i++) {

print("nationality", key[0][i]);

}

System.out.println();

for (int i = 0; i 5; i++) {

print("color", key[1][i]);

}

System.out.println();

for (int i = 0; i 5; i++) {

print("pet", key[2][i]);

}

System.out.println();

for (int i = 0; i 5; i++) {

print("drink", key[3][i]);

}

System.out.println();

for (int i = 0; i 5; i++) {

print("tobacco", key[4][i]);

}

System.out.println();

}

public void print(String item, int index) {

if (false) {

} else if ("nationality".equals(item)) {

switch (index) {

case 1:

System.out.print("英国人\t\t");

break;

case 2:

System.out.print("瑞典人\t\t");

break;

case 3:

System.out.print("丹麦人\t\t");

break;

case 4:

System.out.print("挪威人\t\t");

break;

case 5:

System.out.print("德国人\t\t");

break;

}

} else if ("color".equals(item)) {

switch (index) {

case 1:

System.out.print("红房子\t\t");

break;

case 2:

System.out.print("绿房子\t\t");

break;

case 3:

System.out.print("黄房子\t\t");

break;

case 4:

System.out.print("白房子\t\t");

break;

case 5:

System.out.print("蓝房子\t\t");

break;

}

} else if ("pet".equals(item)) {

switch (index) {

case 1:

System.out.print("狗\t\t");

break;

case 2:

System.out.print("鸟\t\t");

break;

case 3:

System.out.print("猫\t\t");

break;

case 4:

System.out.print("马\t\t");

break;

case 5:

System.out.print("鱼\t\t");

break;

}

} else if ("drink".equals(item)) {

switch (index) {

case 1:

System.out.print("茶\t\t");

break;

case 2:

System.out.print("咖啡\t\t");

break;

case 3:

System.out.print("牛奶\t\t");

break;

case 4:

System.out.print("啤酒\t\t");

break;

case 5:

System.out.print("水\t\t");

break;

}

} else if ("tobacco".equals(item)) {

switch (index) {

case 1:

System.out.print("PALLMALL\t\t");

break;

case 2:

System.out.print("DUNHILL\t\t");

break;

case 3:

System.out.print("BLUEMASTER\t\t");

break;

case 4:

System.out.print("PRINCE\t\t");

break;

case 5:

System.out.print("混合烟\t\t");

break;

}

}

}

private boolean check01() {

boolean ret = true;

// 条件1:英国人住在红房子里 01

for (int i = 0; i nationalities.length; i++) {

if (key[0][i] == NATIONALITY_ENGLISH) {

if (key[1][i] != COLOR_RED) {

ret = false;

}

break;

}

}

return ret;

}

private boolean check02() {

boolean ret = true;

// 条件2:瑞典人养了一条狗 02

for (int i = 0; i nationalities.length; i++) {

if (key[0][i] == NATIONALITY_SWIDISH) {

if (key[2][i] != PET_DOG) {

ret = false;

}

break;

}

}

return ret;

}

private boolean check1() {

boolean ret = true;

// 条件4:绿房子在白房子的左边 1

for (int i = 0; i colors.length; i++) {

if (key[1][i] == COLOR_GREEN) {

for (int j = 0; j colors.length; j++) {

if (key[1][j] == COLOR_WHITE) {

if (i j) {

ret = false;

}

break;

}

}

}

}

return ret;

}

private boolean check3() {

// 条件8:住在中间房子的人喝牛奶 3

return key[3][2] == DRINK_MILK ? true : false;

}

// 条件9:挪威人住在第一间房子 0

private boolean check0() {

if (key[0][0] != NATIONALITY_NORWAY) {

return false;

}

return true;

}

private boolean check011() {

// 14.挪威人住在蓝房子旁边 01

boolean ret = false;

for (int i = 0; i nationalities.length; i++) {

if (key[0][i] == NATIONALITY_NORWAY) {

for (int j = 0; j colors.length; j++) {

if (key[1][j] == COLOR_BLUE) {

if (Math.abs(i - j) == 1) {

return true;

} else {

return false;

}

}

}

}

}

return ret;

}

// /////////////////////////////////////////////////////////////////

private boolean check() {

boolean ret = true;

// 条件1:英国人住在红房子里 01

ret = check01();

if (ret == false)

return false;

// 条件2:瑞典人养了一条狗 02

ret = check02();

if (ret == false)

return false;

// 条件3:丹麦人喝茶 03

for (int i = 0; i nationalities.length; i++) {

if (key[0][i] == NATIONALITY_DAMARK) {

if (key[3][i] != DRINK_TEA) {

return false;

} else {

break;

}

}

}

// 条件4:绿房子在白房子的左边 1

ret = check1();

if (ret == false)

return false;

// 条件5:绿房子主人喝咖啡 13

for (int i = 0; i colors.length; i++) {

if (key[1][i] == COLOR_GREEN) {

if (key[3][i] != DRINK_COFFEE) {

return false;

} else {

break;

}

}

}

// 条件6:抽pallmall烟的人养了一只鸟 24

for (int i = 0; i tobaccoes.length; i++) {

if (key[4][i] == TOBACCO_PALLMALL) {

if (key[2][i] != PET_BIRD) {

return false;

} else {

break;

}

}

}

// 条件7:黄房子主人抽dunhill烟 14

for (int i = 0; i colors.length; i++) {

if (key[1][i] == COLOR_YELLOW) {

if (key[4][i] != TOBACCO_DUNHILL) {

return false;

} else {

break;

}

}

}

// 条件8:住在中间房子的人喝牛奶 3

ret = check3();

if (ret == false)

return false;

// 条件9:挪威人住在第一间房子 0

ret = check0();

if (ret == false)

return false;

// 条件10:抽混合烟的人住在养猫人的旁边 24

for (int i = 0; i tobaccoes.length; i++) {

if (key[4][i] == TOBACCO_MIXED) {

for (int j = 0; j pets.length; j++) {

if (key[2][j] == PET_CAT) {

if (i - j != 1 i - j != -1) {

return false;

}

break;

}

}

}

}

// 条件11:养马人住在抽dunhill烟人的旁边 24

for (int i = 0; i pets.length; i++) {

if (key[2][i] == PET_HORSE) {

for (int j = 0; j tobaccoes.length; j++) {

if (key[4][j] == TOBACCO_DUNHILL) {

if (i - j != 1 i - j != -1) {

return false;

}

break;

}

}

}

}

// 条件12:抽bluemaster烟的人喝啤酒 34

for (int i = 0; i tobaccoes.length; i++) {

if (key[4][i] == TOBACCO_BLUEMASTER) {

if (key[3][i] != DRINK_BEER) {

return false;

} else {

break;

}

}

}

// 13.德国人抽prince烟 04

for (int i = 0; i nationalities.length; i++) {

if (key[0][i] == NATIONALITY_GERMAN) {

if (key[4][i] != TOBACCO_PRINCE) {

return false;

} else {

break;

}

}

}

// 14.挪威人住在蓝房子旁边 01

ret = check011();

if (ret == false)

return false;

// 15.抽混合烟的人的邻居喝矿泉水 34

for (int i = 0; i tobaccoes.length; i++) {

if (key[4][i] == TOBACCO_MIXED) {

for (int j = 0; j drinks.length; j++) {

if (key[3][j] == DRINK_WATER) {

if ((i - j != 1) (i - j != -1)) {

return false;

} else {

break;

}

}

}

}

}

return ret;

}

public void run() {

int count = 0;

for (int a = 0; a 120; a++) {

for (int i = 0; i 5; i++) {

key[0][i] = values[a][i];

}

if (!check0()) {

continue;

}

for (int b = 0; b 120; b++) {

for (int i = 0; i 5; i++) {

key[1][i] = values[b][i];

}

if (!check01() || !check011() || !check1()) {

continue;

}

for (int c = 0; c 120; c++) {

for (int i = 0; i 5; i++) {

key[2][i] = values[c][i];

}

if (!check02()) {

continue;

}

for (int d = 0; d 120; d++) {

for (int i = 0; i 5; i++) {

key[3][i] = values[d][i];

}

// if(!check()){continue;}

for (int e = 0; e 120; e++) {

for (int i = 0; i 5; i++) {

key[4][i] = values[e][i];

}

if (!check()) {

continue;

}

System.out.println("答案" + (++count));

printKey();

System.out

.println("-----------------------------------------------");

}

}

}

}

}

}

public static void main(String[] args) {

WhoFeedsFish wff = new WhoFeedsFish();

System.out.println("==========Start==========");

wff.run();

System.out.println("==========End==========");

}

}

c语言爱因斯坦 谁养鱼

#includestdio.h

char*COL[]={NULL,"红","黄","绿","蓝","白"};

char*PAD[]={NULL,"狗","猫","鱼","鸟","马"};

char*DRK[]={NULL,"茶 ","牛奶","咖啡","啤酒","水 "};

char*GUO[]={NULL,"挪威","英国","德国","丹麦","瑞典"};

char*SMK[]={NULL,"Blends","BlueMaster","Dunhill","Pall Mall","Prince"};

struct{ char guojia, color, pads, drink, smoke; } aa[5];

int OK(void)

{

int i,j;

for(i=0;i5;i++)

if(aa[i].guojia==2 aa[i].color==1)goto next1;

return 0;

next1:

for(i=0;i5;i++)

if(aa[i].guojia==5 aa[i].pads==1)goto next2;

return 0;

next2:

for(i=0;i5;i++)

if(aa[i].guojia==4 aa[i].drink==1)goto next3;

return 0;

next3:

for(i=0;i5;i++)

if(aa[i].color==3)goto next3_1;

return 0;

next3_1:

for(j=i+1;j5;j++)

if(aa[j].color==5)goto next4;

return 0;

next4:

for(i=0;i5;i++)

if(aa[i].color==3 aa[i].drink==3)goto next5;

return 0;

next5:

for(i=0;i5;i++)

if(aa[i].smoke==4 aa[i].pads==4)goto next6;

return 0;

next6:

for(i=0;i5;i++)

if(aa[i].color==2 aa[i].smoke==3)goto next7;

return 0;

next7:

for(i=0;i5;i++)

if(aa[i].guojia==3 aa[i].smoke==5)goto next10;

return 0;

next10:

for(i=0;i5;i++)

if(aa[i].smoke==2 aa[i].drink==4)goto next11;

return 0;

next11:

for(i=0;i5;i++)

if(aa[i].smoke==3)goto next12_1;

next12_1:

if(i==0){if(aa[1].pads==5)goto next13;}

else if(i==4){if(aa[3].pads==5)goto next13;}

else if(aa[i-1].pads==5||aa[i+1].pads==5)goto next13;

return 0;

next13:

for(i=0;i5;i++)

if(aa[i].smoke==1)goto next13_1;

next13_1:

if(i==0){if(aa[1].pads==2)goto next14;}

else if(i==4){if(aa[3].pads==2)goto next14;}

else if(aa[i-1].pads==2||aa[i+1].pads==2)goto next14;

return 0;

next14:

for(i=0;i5;i++)

if(aa[i].smoke==1)goto next14_1;

next14_1:

if(i==0){if(aa[1].drink==5)goto next15;}

else if(i==4){if(aa[3].drink==5)goto next15;}

else if(aa[i-1].drink==5||aa[i+1].drink==5)goto next15;

return 0;

next15:

return 1;

}

char color[4]={1,2,3,5};

char drink[4]={1,3,4,5};

char guojia[4]={2,3,4,5};

char smoke[]={1,2,3,4,5};

char pads[5]={1,2,3,4,5};

int rot(char a[],int n)

{ int i,j,k,t;

for(k=n-1;k0;k--)

if(a[k-1]a[k])break;

if(k==0)

{ for(i=0,j=n-1;ij;i++,j--)

{char t=a[i];

a[i]=a[j];

a[j]=t;

}

return 0;

}

t=a[k-1];i=k;

for(j=k+1;jn;j++)

if(ta[j]a[j]a[i])i=j;

a[k-1]=a[i];a[i]=t;

for(i=k;in-1;i++)

for(j=k;jn-1+k-i;j++)

if(a[j]a[j+1])

{ t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

return 1;

}

int main()

{ int i,j,k,ans=0;

int i1,i2,i3,i4,i5;

aa[1].color=4;

aa[2].drink=2;

aa[0].guojia=1;

for(i1=0;i124;i1++){

aa[0].color=color[0];

aa[2].color=color[1];

aa[3].color=color[2];

aa[4].color=color[3];

rot(color,4);

for(i2=0;i224;i2++){

aa[0].drink=drink[0];

aa[1].drink=drink[1];

aa[3].drink=drink[2];

aa[4].drink=drink[3];

rot(drink,4);

for(i3=0;i324;i3++){

aa[1].guojia=guojia[0];

aa[2].guojia=guojia[1];

aa[3].guojia=guojia[2];

aa[4].guojia=guojia[3];

rot(guojia,4);

for(i4=0;i4120;i4++){

for(i=0;i5;i++)

aa[i].smoke=smoke[i];

rot(smoke,5);

for(i5=0;i5120;i5++){

for(j=0;j5;j++)

aa[j].pads=pads[j];

rot(pads,5);

if(OK()){

printf("---------------------第%d种解---------------------\n",++ans);

for(k=0;k5;k++)

printf("第%d户: %s人 %s房子 养%s 喝%s 抽%s\n",k+1,GUO[aa[k].guojia],

COL[aa[k].color],PAD[aa[k].pads],DRK[aa[k].drink],SMK[aa[k].smoke]);

}}}}}}

return 0;

}

如何用语言解决这个问题

1)位于最中间的屋主喝牛奶:可以得出第三间房子的主人喝的饮料是牛奶。

(2)挪威人住在第一间房屋里:可以得出第一间房子的主人国籍是挪威人。

(3)挪威人住在蓝色房子隔壁:可以得出第二间房子的主人房子的颜色是蓝色。

(4)绿色的房子在白色的房子的左边;绿色房屋的屋主喝咖啡:由于绿色房子和白色房子是连在一起的,所以现在可以选择的房子颜色是3、4、5号,绿色房子和白色房子在这三间房子里面;而绿色房子在白色房子的左边,因此,若3号是绿色,4号就是白色,若4号是绿色,5号是白色,由于绿色房子的屋主喝咖啡,因此,绿色房子不可能是3号,因此,4号是绿色,5号是白色;第四间房子的主人喝的饮料是咖啡。

(5)英国人住在红色房屋里:1号房子是挪威人,因此1号排除,2、4、5号房子均有颜色,因此,3号房子是红色的,国籍是英国人。

(6)黄色屋主抽Dunhill:剩余的1号房子的颜色是黄色,房主抽的是Dunhill。

(7)养马的屋主在抽Dunhill的人家的隔壁:抽Dunhill是1号,因此2号养马。

(8)抽Blue Master的屋主喝啤酒:现在饮料和香烟都没有确定的是2号和5号;假设:若5号是,5号房子主人和啤酒,抽Blue Master。

(9)在(8)假设成立的前提下,丹麦人喝茶:国籍和饮料都没有确定的只有2号,因此,2号房主的国籍是丹麦人,喝的是茶。

(10)在(8)假设成立的前提下,德国人抽Prince:国籍没有定的是4号和5号,而5号抽Blue Master,因此,4号房主是德国人,抽Prince。

(11)在(8)假设成立的前提下,瑞典人养了一只狗:只剩下5号,因此,5号房主国籍是瑞典人,养狗。

(12)在(8)假设成立的前提下,抽Pall Mall香烟的屋主养鸟:香烟和宠物都没有确定的只有3号,因此,3号房主抽Pall Mall,养鸟。

(13)在(8)假设成立的前提下,抽Blend的人住在养猫人家的隔壁:只剩下2号,因此,2号房主抽Blend,1号房主养猫。

(14)在(8)假设成立的前提下,只喝开水的人家住在抽Blend的隔壁:只剩下1号,1号房主喝的饮料是开水。

(15)最后剩一个就是养鱼。

(16)因此,(8)的假设成立。

最后得到结论 德国人养的鱼