标题:[原创]爱因斯坦给出的智力测验题
只看楼主
kidd2005
Rank: 1
等 级:新手上路
帖 子:193
专家分:0
注 册:2007-11-2
得分:0 
怎么我看过一本书,一路的分析,最后只有一个答案啊??

潜心苦C,却发觉百C不得其解啊~
2007-11-13 11:07
windlzf
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-8-7
得分:0 
rot函数中
a[k-1]=a;a=t;
能编译通过?
2007-11-22 17:38
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
得分:0 
楼主真是以为神人了啊!!

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-11-22 17:43
yu_hua
Rank: 2
等 级:论坛游民
帖 子:222
专家分:95
注 册:2006-8-10
得分:0 
/*--------------------------------------------
    本人用C语言编写的破解难题的程序(完美版)
----------------------------------------------*/
#include<stdio.h>
#include<math.h>
int aa[5][5];
//aa第0行的意义: 挪威、英国、瑞典、德国、丹麦
//aa第1行的意义: 蓝、黄、绿、红、白
//aa第2行的意义: 牛奶、咖啡、啤酒、茶、水
//aa第3行的意义: 猫、狗、马、鸟、鱼
//aa第4行的意义: Blends、BlueMaster、Dunhill、Pall Mall、Prince
//aa[i][j]的意义:该人或物所属房间号
char*msg[][5]={"挪威人","英国人","瑞典人","德国人","丹麦人",
               "蓝房子","黄房子","绿房子","红房子","白房子",
               "喝牛奶","喝咖啡","喝啤酒","喝茶  ","喝水  ",
               "养猫","养狗","养马","养鸟","养鱼","抽Blends",
               "抽BlueMaster","抽Dunhill","抽Pall Mall","抽Prince"};
char guoji[4]={2,3,4,5};
char color[4]={1,3,4,5};
char drink[4]={1,2,4,5};
char pads[5]={1,2,3,4,5};
char smoke[]={1,2,3,4,5};

int OK(void)
{
   if( (aa[1][1]==aa[4][2]) //黄房     抽Dunhill
     &&(aa[2][1]==aa[1][2]) //绿房     喝咖啡
     &&(aa[0][1]==aa[1][3]) //红房     英国人
     &&(aa[2][2]==aa[4][1]) //喝啤酒者 抽BlueMaster
     &&(aa[3][3]==aa[4][3]) //养鸟者   抽PallMal
     &&(aa[0][2]==aa[3][1]) //瑞典人   养狗
     &&(aa[0][3]==aa[4][4]) //德国人   抽Prince
     &&(aa[0][4]==aa[2][3]) //丹麦人   喝茶
     &&(abs(aa[4][0]-aa[3][0])==1)//   抽Blends者与养猫人邻居
     &&(abs(aa[4][0]-aa[2][4])==1)//   抽Blends者与喝水人邻居
     &&(abs(aa[3][2]-aa[4][2])==1)//   抽Dunhil者与养马人邻居
     )  return 1;
     else
        return 0;
}

int rot(char a[],int n) //全排列
{   int i,j,k,t;
    for(k=n-1;k>0;k--)
       if(a[k-1]<a[k])break;
    if(k==0)
    {  for(i=0,j=n-1;i<j;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;j<n;j++)
      if(t<a[j]&&a[j]<a[i])i=j;
    a[k-1]=a[i];a[i]=t;
    for(i=k;i<n-1;i++)
      for(j=k;j<n-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 i1,i2,i3,i4,i5,i,j,k,ans=0;
    aa[0][0]=1; //表示挪威人住在1号房
    aa[1][0]=2; //表示蓝色房子是2号房
    aa[2][0]=3; //表示喝牛奶者在3号房
    for(i1=0;i1<24;i1++)
    {   for(j=0;j<4;j++)aa[1][j+1]=color[j];
        rot(color,4);
        if(aa[1][2]<aa[1][4]) //绿房在白房的左边
        for(i2=0;i2<24;i2++)
        {   for(j=0;j<4;j++)aa[0][j+1]=guoji[j];
            rot(guoji,4);
            for(i3=0;i3<24;i3++)
            {   for(j=0;j<4;j++)aa[2][j+1]=drink[j];
                rot(drink,4);
                for(i4=0;i4<120;i4++)
                {   for(j=0;j<5;j++)aa[3][j]=pads[j];
                    rot(pads,5);
                    for(i5=0;i5<120;i5++)
                    {   for(j=0;j<5;j++)aa[4][j]=smoke[j];
                        rot(smoke,5);
                        if(OK())
                        {  printf("--------------第%d组解如下--------------------\n",++ans);
                           for(k=1;k<=5;k++)
                           {   printf("第%d户: ",k);
                               for(i=0;i<=4;i++)
                                 for(j=0;j<=4;j++)
                                   if(aa[i][j]==k)printf("%s ",msg[i][j]);
                               printf("\n");
                           }
                        }
                    }
                }
            }
        }
    }
    printf("=============================================\n");
    return 0;
}

/**
--------------第1组解如下--------------------
第1户: 挪威人 黄房子 喝水   养猫 抽Dunhill
第2户: 丹麦人 蓝房子 喝茶   养马 抽Blends
第3户: 英国人 红房子 喝牛奶 养鸟 抽Pall Mall
第4户: 德国人 绿房子 喝咖啡 养鱼 抽Prince
第5户: 瑞典人 白房子 喝啤酒 养狗 抽BlueMaster
--------------第2组解如下--------------------
第1户: 挪威人 绿房子 喝咖啡 养鱼 抽Blends
第2户: 德国人 蓝房子 喝水   养猫 抽Prince
第3户: 瑞典人 黄房子 喝牛奶 养狗 抽Dunhill
第4户: 英国人 红房子 喝啤酒 养马 抽BlueMaster
第5户: 丹麦人 白房子 喝茶   养鸟 抽Pall Mall
--------------第3组解如下--------------------
第1户: 挪威人 绿房子 喝咖啡 养鸟 抽Pall Mall
第2户: 德国人 蓝房子 喝水   养猫 抽Prince
第3户: 英国人 红房子 喝牛奶 养马 抽Blends
第4户: 丹麦人 黄房子 喝茶   养鱼 抽Dunhill
第5户: 瑞典人 白房子 喝啤酒 养狗 抽BlueMaster
--------------第4组解如下--------------------
第1户: 挪威人 绿房子 喝咖啡 养鸟 抽Pall Mall
第2户: 德国人 蓝房子 喝水   养鱼 抽Prince
第3户: 英国人 红房子 喝牛奶 养马 抽Blends
第4户: 丹麦人 黄房子 喝茶   养猫 抽Dunhill
第5户: 瑞典人 白房子 喝啤酒 养狗 抽BlueMaster
--------------第5组解如下--------------------
第1户: 挪威人 绿房子 喝咖啡 养鸟 抽Pall Mall
第2户: 德国人 蓝房子 喝水   养猫 抽Prince
第3户: 瑞典人 白房子 喝牛奶 养狗 抽Blends
第4户: 丹麦人 黄房子 喝茶   养鱼 抽Dunhill
第5户: 英国人 红房子 喝啤酒 养马 抽BlueMaster
--------------第6组解如下--------------------
第1户: 挪威人 绿房子 喝咖啡 养鸟 抽Pall Mall
第2户: 德国人 蓝房子 喝水   养鱼 抽Prince
第3户: 瑞典人 白房子 喝牛奶 养狗 抽Blends
第4户: 丹麦人 黄房子 喝茶   养猫 抽Dunhill
第5户: 英国人 红房子 喝啤酒 养马 抽BlueMaster
--------------第7组解如下--------------------
第1户: 挪威人 绿房子 喝咖啡 养鸟 抽Pall Mall
第2户: 德国人 蓝房子 喝水   养猫 抽Prince
第3户: 瑞典人 白房子 喝牛奶 养狗 抽Blends
第4户: 英国人 红房子 喝啤酒 养马 抽BlueMaster
第5户: 丹麦人 黄房子 喝茶   养鱼 抽Dunhill
=============================================
**/
2007-11-22 21:07
windlzf
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-8-7
得分:0 
rot函数中
a[k-1]=a;a=t;
啥意思啊?
有的编译器能通过,有的不能。但都运行出错了。
你什么编译工具啊?
2007-11-23 09:13
yu_hua
Rank: 2
等 级:论坛游民
帖 子:222
专家分:95
注 册:2006-8-10
得分:0 
原帖由 windlzf 于 2007-11-23 09:13 发表 [url=http://bbs.][/url]
rot函数中
a[k-1]=a;a=t;
啥意思啊?
有的编译器能通过,有的不能。但都运行出错了。
你什么编译工具啊?


都是改版惹的祸。我的原版程序不是这样,而且我
从来不用斜体字。:funk:
2007-11-23 19:45
deleter
Rank: 1
等 级:新手上路
威 望:1
帖 子:858
专家分:0
注 册:2007-7-5
得分:0 
有点意思

物理学家的问题在于他们总是试图用作弊的方法获得结果。
数学家的问题在于他们总是试图获得最幼稚的问题的结果。
软件测试工程师的问题在于他们总是试图用作弊的方法获得最幼稚的问题的结果。
2007-11-23 20:43
堕落风流
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-12-19
得分:0 

都是超人啊!
2007-12-19 10:14
C语言的深度
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:卡特的怀抱
等 级:版主
威 望:1
帖 子:9577
专家分:19
注 册:2007-10-22
得分:0 
强大
我只能这样说

用代码打出楼房...用编程编出幸福...
2007-12-19 10:32
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
强人啊,顶一个.
2007-12-19 10:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-185111-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.123477 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved