返回首页

谁养鱼??(说出你的推理过程)

来源:www.yangzhi8.com.cn   时间:2022-12-18 02:58   点击:214  编辑:admin   手机版

谁养鱼??(说出你的推理过程)

呵呵,这道题解出来了!答案是德国人养鱼,推理过程如下:首先把五个房间依次从左到有编号为一至五!首先由9可知,挪威人住在第一个房间,把挪威人移进一号房间!然后由14可知,挪威人住在蓝色房子的隔壁,由于挪威人是第一间房子,那么他只有二号房子这个隔壁,因此把“蓝色”移进第二个房子。又由8可知,中间的人喝牛奶,那么把“牛奶”移进中间的房子(也就是三号房子)。由4可知,绿色房子在白色房子左边,由于第二间房子颜色已经定下来了,所以绿色跟白色房子要么就在三、四号,要么就在四、五号,又由5可知,绿色房子的主人喝咖啡,而由上可知三号房子的人喝牛奶,所以绿色跟白色房子只能分别在四、五号房子了!然后把“绿色”跟“咖啡”移进四号房,把“白色”移进五号房子。由1可知,英国人住红色房子,那么由上可知,一号房子住着挪威人,二号房子为蓝色,绿白分别是四号跟五号,所以英国人只能住三号房子。把“英国人”、“红色”移进第三间房子!由此可以推断,只剩下黄色还没有对号入座,还没有颜色的房子只有一号,因此知道一号房子为黄色!把“黄色”移进第一间房子。由7可知,黄色房子的主人抽Dunhill牌的香烟,因此把“Dunhil香烟”移进第一个房子!由11可知,养马的人住在抽Dunhill牌香烟的人的隔壁,因此把“马”移进第二个房子!由2加上前面的情况可知,瑞典人只可能住在四号或五号房子,由3加上前面的情况可知,丹麦人只能住在二号或五号房子,由13加上上面的情况可知,德国人只可能住在二、四或无号房子。如果假设德国人住在二号房子,则丹麦人住在五号房子,瑞典人住在四号房子;如果设德国人住在五号房子,那么丹麦人只能住在二号房子,瑞典人只能住在四号房子,但由12(抽BlueMaster香烟的人喝酒)可知,以上两种假设都不成立。大家按照以上的两种情况画一个表格就一目了然了!如果是上述的两种假设的话,我们不可能找到符合条件12的房子,因为每一间房子的情况都会与它冲突!因此以上两种假设都排除!那么,德国人只能住在四号房子,丹麦人只能住二号房子,瑞典人只能住五号房子了!那么我们把瑞典人还有狗移到五号房间,德国人还有Prince香烟移到四号房间,丹麦人还有茶移到二号房子。由15可知,抽Blens香烟的人的邻居喝水,那么,抽Blens香烟的人可能在二,三、五号房子,由于跟三、五相邻的四号房子的人喝咖啡,所以抽Blens香烟的人只能在二号房子,而且喝水的人在一号房子。那么,现在把抽Blens香烟的人移入二号房子,把“水”移入一号房子。从条件6加上目前各房子的情况可知,抽PallMall香烟并且养鸟的人只能住在三号房子!又把它们移入相应的房子!大家有没有画表格跟着我的思路走啊?我接着往下讲:从条件12加上上述情况可知,抽BlueMaster香烟并且喝酒的人只能住在五号房子!又把它们对号入座。最后剩下条件10,同理加上上述情况可知,住在抽Blens香烟的人隔壁并且养猫的人,只可能住在一号房子了!再把它们对号入座!剩下来还不知道养什么动物的人,就只有住在四号房子的德国人了!因此养鱼的是德国人!因此答案:是德国人养鱼!最后我把每个人的所有的资料总结一下吧:挪威人住在一号房间,房间为黄色,抽Dunhill牌香烟,养猫,喝水;丹麦人住在二号房间,房间为蓝色,养马,抽Blens牌香烟,喝茶;英国人住在三号房间,房间为红色,抽PallMall牌香烟,喝奶,养鸟;德国人住在四号房间,房间为绿色,喝咖啡,抽Prince牌香烟,养鱼;瑞典人住在五号房间,房间是白色,喝啤酒,养狗,抽BlueMaster牌香烟!呵呵,终于打完啦!手指都要断了。谢谢你给我思考的机会,这个答案希望你满意!

爱因斯坦”高智商逻辑推理

不能一会儿用口算出来,直接在网上搜得了下面资料 1 2 3 4 5 挪威 丹麦 英国 德国 瑞典 黄色 蓝色 红色 绿色 白色 Dunhill Blend pall mall prinee bine msier 开水 茶 牛奶 咖啡 啤酒 猫 马 鸟 鱼 狗 #include char* people[5] = {NULL}; char* color[5] = {NULL}; char* smoke[5] = {NULL}; char* drink[5] = {NULL}; char* pet[5] = {NULL}; /* char* people[] = {挪威,丹麦,英国,德国,瑞典}; char* color[] = {黄色,蓝色,红色,绿色,白色}; char* smoke[] = {Dunhill,Blend,Pall Mall,Prinee,Bine Masier}; char* drink[] = {开水,茶,牛奶,咖啡,啤酒}; char* pet[] = {猫,马,鸟,鱼,狗}; */ void print_single_result(const char* remark, char* a[]) { cout << remark << endl; for( int i = 0; i < 5; i ++ ) { if( NULL == a[i] ) cout << NULL; else cout << a[i]; cout << \t << flush; } cout << endl; } void print_result() { print_single_result(people, people); print_single_result(color, color); print_single_result(smoke, smoke); print_single_result(drink, drink); print_single_result(pet, pet); } int foo(const int level); int main() { if( 0 == foo(0) ) { print_result(); } return 0; } Top { /* 0. (drink[2]==牛奶) 1. (people[0]==挪威) 2. (people[i]==英国&&color[i]==红色) 3. (people[i]==瑞典&&pet[i]==狗) 4. (people[i]==丹麦&&drink[i]==茶) 5. (color[i]==绿色&&drink[i]==咖啡) 6. (smoke[i]==Bine Masier&&drink[i]==啤酒) 7. (smoke[i]==Pall Mall&&pet[i]==鸟) 8. (color[i]==黄色&&smoke[i]==Dunhill) 9. (people[i]==德国&&smoke[i]==Prinee) 10. (color[i]==绿色&&color[j]==白色&&(i=0 ) { int j = i-1; int isNull2=0; if( pet[j] == NULL || !strcmp(pet[j],马) ) { if( pet[j] == NULL ) isNull2 = 1; if( isNull2 ) pet[j] = 马; if( 0 == foo(level+1) ) return 0; if( isNull2 ) pet[j] = NULL; } } if( i+1<=4 ) { int j = i+1; int isNull2=0; if( pet[j] == NULL || !strcmp(pet[j],马) ) { if( pet[j] == NULL ) isNull2 = 1; if( isNull2 ) pet[j] = 马; if( 0 == foo(level+1) ) return 0; if( isNull2 ) pet[j] = NULL; } } if( isNull1 ) smoke[i] = NULL; } return 1; } break; case 12 : { int i = 0; for( i = 0; i < 5; i ++ ) { int isNull1=0; if( smoke[i] != NULL && strcmp(smoke[i],Blend) ) continue; if( smoke[i] == NULL ) isNull1 = 1; if( isNull1 ) smoke[i] = Blend; if( i-1>=0 ) { int j = i-1; int isNull2=0; if( pet[j] == NULL || !strcmp(pet[j],猫) ) { if( pet[j] == NULL ) isNull2 = 1; if( isNull2 ) pet[j] = 猫; if( 0 == foo(level+1) ) return 0; if( isNull2 ) pet[j] = NULL; } } if( i+1<=4 ) { int j = i+1; int isNull2=0; if( pet[j] == NULL || !strcmp(pet[j],猫) ) { if( pet[j] == NULL ) isNull2 = 1; if( isNull2 ) pet[j] = 猫; if( 0 == foo(level+1) ) return 0; if( isNull2 ) pet[j] = NULL; } } if( isNull1 ) smoke[i] = NULL; } return 1; } break; case 13 : { int i = 0; for( i = 0; i < 5; i ++ ) { int isNull1=0; if( people[i] != NULL && strcmp(people[i],挪威) ) continue; if( people[i] == NULL ) isNull1 = 1; if( isNull1 ) people[i] = 挪威; if( i-1>=0 ) { int j = i-1; int isNull2=0; if( color[j] == NULL || !strcmp(color[j],蓝色) ) { if( color[j] == NULL ) isNull2 = 1; if( isNull2 ) color[j] = 蓝色; if( 0 == foo(level+1) ) return 0; if( isNull2 ) color[j] = NULL; } } if( i+1<=4 ) { int j = i+1; int isNull2=0; if( color[j] == NULL || !strcmp(color[j],蓝色) ) { if( color[j] == NULL ) isNull2 = 1; if( isNull2 ) color[j] = 蓝色; if( 0 == foo(level+1) ) return 0; if( isNull2 ) color[j] = NULL; } } if( isNull1 ) people[i] = NULL; } return 1; } break; case 14 : { int i = 0; for( i = 0; i < 5; i ++ ) { int isNull1=0; if( drink[i] != NULL && strcmp(drink[i],开水) ) continue; if( drink[i] == NULL ) isNull1 = 1; if( isNull1 ) drink[i] = 开水; if( i-1>=0 ) { int j = i-1; int isNull2=0; if( smoke[j] == NULL || !strcmp(smoke[j],Blend) ) { if( smoke[j] == NULL ) isNull2 = 1; if( isNull2 ) smoke[j] = Blend; return 0; } } if( i+1<=4 ) { int j = i+1; int isNull2=0; if( smoke[j] == NULL || !strcmp(smoke[j],Blend) ) { if( smoke[j] == NULL ) isNull2 = 1; if( isNull2 ) smoke[j] = Blend; return 0; } } if( isNull1 ) drink[i] = NULL; } return 1; } break; default : break; } return 1; }))>

顶一下
(0)
0%
踩一下
(0)
0%