爱因斯坦的智力题

wzq6511 2007-07-10 03:38:55
爱因斯坦出了一道题,他说世界上有90%的人回答不出,看看你是否属于10%。

  内容:
  1. 有5栋5种颜色的房子
  2. 每一位房子的主人国籍都不同
  3. 这五个人每人只喝一个牌子的饮料,只抽一个牌子的香烟,只养一种宠物
  4. 没有人有相同的宠物,抽相同牌子的烟,喝相同牌子的饮料
  已知条件:
  1. 英国人住在红房子里
  2. 瑞典人养了一条狗
  3. 丹麦人喝茶
  4. 绿房子在白房子的左边
  5. 绿房子主人喝咖啡
  6. 抽PALL MALL 烟的人养了一只鸟
  7. 黄房子主人抽DUNHILL烟
  8. 住在中间房子的人喝牛奶
  9. 挪威人住在第一间房子
  10. 抽混合烟的人住在养猫人的旁边
  11. 养马人住在抽DUNHILL烟人的旁边
  12. 抽BLUE MASTER烟的人喝啤酒
  13. 德国人抽PRINCE烟
  14. 挪威人住在蓝房子旁边
  15. 抽混合烟的人的邻居喝矿泉水
  问题:谁养鱼?

偶花了20分钟终于做出来了。
...全文
2476 49 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
cupidvenus 2007-08-10
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <conio.h>

typedef enum {nBritish, nSweden, nDenmark, nNorway, nGermany} Nationality;
typedef enum {hcRed, hcGreen, hcWhite, hcYellow, hcBlue} HouseColor;
typedef enum {bTea, bCoffee, bMilk, bBeer, bWater} Beverage;
typedef enum {cPALLMALL, cDUNHILL, cBLUEMASTER, cPRINCE, cMIX} Cigarettes;
typedef enum {pDog, pBird, pCat, pHorse, pFish} Pets;

#define MAX_METHOD 120 // 5!

int main(int argc, char *argv)
{
int Method[MAX_METHOD][5];
int i;
int i0,i1,i2,i3,i4;
int (*Nat), (*Col), (*Bev), (*Cig), (*Pet);
int GreenPos, WhitePos;

i = 0;
for (i0 = 0; i0 < 5; ++i0)
{
for (i1 = 0; i1 < 5; ++i1)
{
if (i1 == i0) continue;
for (i2 = 0; i2 < 5; ++i2)
{
if ((i2 == i0) || (i2 == i1)) continue;
for (i3 = 0; i3 < 5; ++i3)
{
if ((i3 == i0) || (i3 == i1) || (i3 == i2)) continue;
for (i4 = 0; i4 < 5; ++i4)
{
if ((i4 == i0) || (i4 == i1) || (i4 == i2) || (i4 == i3)) continue;
Method[i][0] = i0;
Method[i][1] = i1;
Method[i][2] = i2;
Method[i][3] = i3;
Method[i][4] = i4;
++i;
}
}
}
}
}

for (Nat = Method[0], i0 = MAX_METHOD; i0 > 0; Nat += 5, --i0)
{
// Condition 9
if ((Nationality)(Nat[0]) != nNorway) continue;

for (Col = Method[0], i1 = MAX_METHOD; i1 > 0; Col += 5, --i1)
{
for (Bev = Method[0], i2 = MAX_METHOD; i2 > 0; Bev += 5, -- i2)
{
// Condition 8
if ((Beverage)(Bev[2]) != bMilk) continue;

for (Cig = Method[0], i3 = MAX_METHOD; i3 > 0; Cig += 5, --i3)
{
for (Pet = Method[0], i4 = MAX_METHOD; i4 > 0; Pet += 5, --i4)
{
GreenPos = 5;
WhitePos = 5;
for (i = 0; i < 5; ++i)
{
// Condition 1
if (((Nationality)(Nat[i]) == nBritish) && ((HouseColor)(Col[i]) != hcRed)) break;
if (((HouseColor)(Col[i]) == hcRed) && ((Nationality)(Nat[i]) != nBritish)) break;

// Condition 2
if (((Nationality)(Nat[i]) == nSweden) && ((Pets)(Pet[i]) != pDog)) break;
if (((Pets)(Pet[i]) == pDog) && ((Nationality)(Nat[i]) != nSweden)) break;

// Condition 3
if (((Nationality)(Nat[i]) == nDenmark) && ((Beverage)(Bev[i]) != bTea)) break;
if (((Beverage)(Bev[i]) == bTea) && ((Nationality)(Nat[i]) != nDenmark)) break;

// Condition 4
if ((HouseColor)(Col[i]) == hcGreen) GreenPos = i;
if ((HouseColor)(Col[i]) == hcWhite) WhitePos = i;
if (GreenPos > WhitePos) break;

// Condition 5
if (((HouseColor)(Col[i]) == hcGreen) && ((Beverage)(Bev[i]) != bCoffee)) break;
if (((Beverage)(Bev[i]) == bCoffee) && ((HouseColor)(Col[i]) != hcGreen)) break;

// Condition 6
if (((Cigarettes)(Cig[i]) == cPALLMALL) && ((Pets)(Pet[i]) != pBird)) break;
if (((Pets)(Pet[i]) == pBird) && ((Cigarettes)(Cig[i]) != cPALLMALL)) break;

// Condition 7
if (((HouseColor)(Col[i]) == hcYellow) && ((Cigarettes)(Cig[i]) != cDUNHILL)) break;
if (((Cigarettes)(Cig[i]) == cDUNHILL) && ((HouseColor)(Col[i]) != hcYellow)) break;

// Condition 10
if (((Cigarettes)(Cig[i]) == cMIX) && (!(((i - 1 >= 0) && ((Pets)(Pet[i - 1]) == pCat)) || ((i + 1 < 5) && ((Pets)(Pet[i + 1]) == pCat))))) break;

// Condition 11
if (((Pets)(Pet[i]) == pHorse) && (!(((i - 1 >= 0) && ((Cigarettes)(Cig[i - 1]) == cDUNHILL)) || ((i + 1 < 5) && ((Cigarettes)(Cig[i + 1]) == cDUNHILL))))) break;

// Condition 12
if (((Cigarettes)(Cig[i]) == cBLUEMASTER) && ((Beverage)(Bev[i]) != bBeer)) break;
if (((Beverage)(Bev[i]) == bBeer) && ((Cigarettes)(Cig[i]) != cBLUEMASTER)) break;

// Condition 13
if (((Nationality)(Nat[i]) == nGermany) && ((Cigarettes)(Cig[i]) != cPRINCE)) break;
if (((Cigarettes)(Cig[i]) == cPRINCE) && ((Nationality)(Nat[i]) != nGermany)) break;

// Condition 14
if (((Nationality)(Nat[i]) == nNorway) && (!(((i - 1 >= 0) && ((HouseColor)(Col[i - 1]) == hcBlue)) || ((i + 1 < 5) && ((HouseColor)(Col[i + 1]) == hcBlue))))) break;

// Condition 15
if (((Cigarettes)(Cig[i]) == cMIX) && (!(((i - 1 >= 0) && ((Beverage)(Bev[i - 1]) == bWater)) || ((i + 1 < 5) && ((Beverage)(Bev[i + 1]) == bWater))))) break;
}
if (i == 5)
{
printf("%d %d %d %d %d\n", Nat[0], Nat[1], Nat[2], Nat[3], Nat[4]);
printf("%d %d %d %d %d\n", Col[0], Col[1], Col[2], Col[3], Col[4]);
printf("%d %d %d %d %d\n", Bev[0], Bev[1], Bev[2], Bev[3], Bev[4]);
printf("%d %d %d %d %d\n", Cig[0], Cig[1], Cig[2], Cig[3], Cig[4]);
printf("%d %d %d %d %d\n\n", Pet[0], Pet[1], Pet[2], Pet[3], Pet[4]);
}
}
}
}
}
}

return 0;
}

答案:
3 2 0 4 1
3 4 0 1 2
4 0 2 1 3
1 4 0 3 2
2 3 1 4 0

3 4 0 2 1
1 4 0 3 2
1 4 2 0 3
0 3 4 1 2
1 2 3 4 0

3 4 0 2 1
1 4 0 3 2
1 4 2 0 3
0 3 4 1 2
1 4 3 2 0

3 4 1 0 2
1 4 2 0 3
1 4 2 3 0
0 3 4 2 1
1 2 0 3 4

3 4 1 0 2
1 4 3 0 2
1 4 2 3 0
4 3 1 2 0
4 2 0 3 1

3 4 1 2 0
1 4 2 3 0
1 4 2 0 3
0 3 4 1 2
1 2 0 4 3

3 4 1 2 0
1 4 2 3 0
1 4 2 0 3
0 3 4 1 2
1 4 0 2 3
shinaterry 2007-07-13
  • 打赏
  • 举报
回复
闷闷...
the_AK47 2007-07-13
  • 打赏
  • 举报
回复
爱因斯坦出了一道题,他说世界上有90%的人回答不出,看看你是否属于10%.

这真是爱因斯坦说得吗????

对于一个正常的人,给他纸和笔肯定能做出来。会玩数独的人会做得更快。
问题是的关键不是思维的能力,而只是思维方式和推理方法。
lottery1821 2007-07-12
  • 打赏
  • 举报
回复
我也做了半个多小时,做出来了
thinker87 2007-07-12
  • 打赏
  • 举报
回复
德国人养鱼 还用程序编出来不成?????不是吧!!!逻辑推理出来也行吧!!!
wzq6511 2007-07-12
  • 打赏
  • 举报
回复
那个用Excel做的很强
autumnlj 2007-07-12
  • 打赏
  • 举报
回复
为什么德国人一定养鱼?可以养其他的啊,比如说大猩猩什么的
夏至夕陽 2007-07-12
  • 打赏
  • 举报
回复
也没说这里有养鱼的啊
zhu_jiang 2007-07-12
  • 打赏
  • 举报
回复
第一间房:挪威人/DUNHILL/矿泉水/黄房子/猫
第二间房:丹麦人/混合烟/茶/蓝房子/马
第三间房:英国人/PALL MALL/牛奶/红房子/鸟
第四间房:德国人/PRINCE/咖啡/绿房子/鱼
第五间房:瑞典人/BLUE MASTER/啤酒/白房子/狗
AhJo 2007-07-11
  • 打赏
  • 举报
回复

连题目都整成英文的了
智利题热潮再掀新高……


还是要支持一下前面各位高手
wzq6511 2007-07-11
  • 打赏
  • 举报
回复
tss1011() 不错,你也是属于10%的
lixinfa2000 2007-07-11
  • 打赏
  • 举报
回复
俺也做出来
花了大概半小时
绿色+咖啡+德国+prince
tss1011 2007-07-11
  • 打赏
  • 举报
回复
挪威 丹麦 英国 德国 瑞典
---------------------------------
黄 蓝 红 绿 白
---------------------------------
矿泉水 茶 牛奶 咖啡 啤酒
---------------------------------
dun 混和 pall pri blue
---------------------------------
猫 马 鸟 鱼 狗

哈哈哈 楼主帮看看 和正确答案一样不:) 刚算算 挺有意思的 顶!~!
None465465535 2007-07-11
  • 打赏
  • 举报
回复
7月的<程序员>上
butwang 2007-07-11
  • 打赏
  • 举报
回复
不会是爱因斯坦的,据说爱因斯坦连pai都没必要记,哪来兴趣写这玩意
studyljg 2007-07-11
  • 打赏
  • 举报
回复
顶!!好好学下
O15013245O 2007-07-11
  • 打赏
  • 举报
回复
mark
jc8futao 2007-07-11
  • 打赏
  • 举报
回复
这个问题时上一期程序员上面的题目
wzq6511 2007-07-11
  • 打赏
  • 举报
回复
那个英文的题目谁翻译下
outh24 2007-07-11
  • 打赏
  • 举报
回复
见过无数次的题目
已经不想再做第n+1次了。
加载更多回复(29)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧