爱因斯坦难题的C语言程序设计

题目是:
1、 在一条街上,有5座房子,喷了5种颜色。 
2、 每个房里住着不同国籍的人 
3、
每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物 
约束条件:
1、 英国人住红色房子 
2、
瑞典人养狗 
3、 丹麦人喝茶 
4、 绿色房子在白色房子左面 
5、
绿色房子主人喝咖啡 
6、 抽Pall Mall 香烟的人养鸟 
7、 黄色房子主人抽、Dunhill
香烟 
8、 住在中间房子的人喝牛奶 
9、
挪威人住第一间房 
10、抽Blends香烟的人住在养猫的人隔壁 
11、养马的人住抽Dunhill
香烟的人隔壁 
12、抽Blue
Master的人喝啤酒 
13、德国人抽Prince香烟 
14、挪威人住蓝色房子隔壁 
15、抽Blends香烟的人有一个喝水的邻居

问题是:谁养鱼?

#include<stdio.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;i<5;i++)
    
if(aa[i].guojia==2 && aa[i].color==1)goto
next1;
    return
0;
next1:
    for(i=0;i<5;i++)
    
if(aa[i].guojia==5 && aa[i].pads==1)goto
next2;
    return
0;
next2:    
    for(i=0;i<5;i++)
    
if(aa[i].guojia==4 && aa[i].drink==1)goto
next3;
    return
0;
next3:
    for(i=0;i<5;i++)
    
if(aa[i].color==3)goto next3_1;
    return
0;
next3_1:
    for(j=i+1;j<5;j++)
    
if(aa[j].color==5)goto next4;
    return
0;
next4:
    for(i=0;i<5;i++)
    
if(aa[i].color==3 && aa[i].drink==3)goto
next5;
    return
0;
next5:
    for(i=0;i<5;i++)
    
if(aa[i].smoke==4 && aa[i].pads==4)goto
next6;
    return
0;
next6:
    for(i=0;i<5;i++)
    
if(aa[i].color==2 && aa[i].smoke==3)goto
next7;
    return
0;
next7:
    for(i=0;i<5;i++)
    
if(aa[i].guojia==3 && aa[i].smoke==5)goto
next10;
    return
0;
next10:
    for(i=0;i<5;i++)
    
if(aa[i].smoke==2 && aa[i].drink==4)goto
next11;
    return
0;
next11:
    for(i=0;i<5;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;i<5;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;i<5;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;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 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;i1<24;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;i2<24;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;i3<24;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;i4<120;i4++){
        for(i=0;i<5;i++)
        aa[i].smoke=smoke[i];
        rot(smoke,5);
    for(i5=0;i5<120;i5++){
        for(j=0;j<5;j++)
        aa[j].pads=pads[j];
        rot(pads,5);
        if(OK()){
        printf("---------------------第%d种解---------------------\n",++ans);
        for(k=0;k<5;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种解---------------------
第1户:
挪威人 黄房子 养猫 喝水   抽Dunhill
第2户: 丹麦人 蓝房子 养马
喝茶   抽Blends
第3户: 英国人 红房子 养鸟 喝牛奶 抽Pall
Mall
第4户: 德国人 绿房子 养鱼 喝咖啡 抽Prince
第5户: 瑞典人 白房子 养狗
喝啤酒
抽BlueMaster
---------------------第2种解---------------------
第1户:
挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水  
抽Prince
第3户: 英国人 红房子 养马 喝牛奶 抽Blends
第4户: 丹麦人 黄房子
养鱼 喝茶   抽Dunhill
第5户: 瑞典人 白房子 养狗 喝啤酒
抽BlueMaster
---------------------第3种解---------------------
第1户:
挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养鱼 喝水  
抽Prince
第3户: 英国人 红房子 养马 喝牛奶 抽Blends
第4户: 丹麦人 黄房子
养猫 喝茶   抽Dunhill
第5户: 瑞典人 白房子 养狗 喝啤酒
抽BlueMaster
---------------------第4种解---------------------
第1户:
挪威人 绿房子 养鱼 喝咖啡 抽Blends
第2户: 德国人 蓝房子 养猫 喝水  
抽Prince
第3户: 瑞典人 黄房子 养狗 喝牛奶 抽Dunhill
第4户: 英国人
红房子 养马 喝啤酒 抽BlueMaster
第5户: 丹麦人 白房子 养鸟 喝茶   抽Pall
Mall
---------------------第5种解---------------------
第1户:
挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水  
抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 英国人 红房子
养马 喝啤酒 抽BlueMaster
第5户: 丹麦人 黄房子 养鱼 喝茶  
抽Dunhill
---------------------第6种解---------------------
第1户:
挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养猫 喝水  
抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 丹麦人 黄房子
养鱼 喝茶   抽Dunhill
第5户: 英国人 红房子 养马 喝啤酒
抽BlueMaster
---------------------第7种解---------------------
第1户:
挪威人 绿房子 养鸟 喝咖啡 抽Pall Mall
第2户: 德国人 蓝房子 养鱼 喝水  
抽Prince
第3户: 瑞典人 白房子 养狗 喝牛奶 抽Blends
第4户: 丹麦人 黄房子
养猫 喝茶   抽Dunhill
第5户: 英国人 红房子 养马 喝啤酒
抽BlueMaster

爱因斯坦难题的C语言程序设计,布布扣,bubuko.com

时间: 2024-10-24 11:00:58

爱因斯坦难题的C语言程序设计的相关文章

为什么很多人吐槽谭浩强的C语言程序设计?

这个观点在网络上已经论战了很长时间,出现这种情况还是历史遗留问题,老谭出的C语言教材几乎是国内的第一版,由于中英翻译问题或者对编程文化理解的差异性导致出来的书多多少少存在一些纰漏.不能只是记住其缺点,老谭书最主要在那个年代起到了普及C语言的作用,这已经足够了,如同做一个产品,首先解决的是有没有问题,最后才是细节完善阶段.最后,如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题. 为什么很多人吐槽谭浩强的C语言

问题 1018: C语言程序设计教程(第三版)课后习题6.8

/******************************************************************** @file Main.cpp @date 2017-05-12 @author Zoro_Tiger @brief 问题 1018: C语言程序设计教程(第三版)课后习题6.8 http://www.dotcpp.com/oj/problem1018.html *************************************************

阅读go语言程序设计

打算花两个月的时间阅读完go语言程序设计 今天是4.29 计划到6.29结束 第1章 第2章 第3章 第4章 第5章 第6章 第7章 第8章 第9章

问题 1041: C语言程序设计教程(第三版)课后习题9.8

/******************************************************************** @file Main.cpp @date 2017-05-28 22:02:55 @author Zoro_Tiger @brief 问题 1041: C语言程序设计教程(第三版)课后习题9.8 http://www.dotcpp.com/oj/problem1041.html ****************************************

问题 1040: C语言程序设计教程(第三版)课后习题9.6

/******************************************************************** @file Main.cpp @date 2017-05-28 21:57:02 @author Zoro_Tiger @brief 问题 1040: C语言程序设计教程(第三版)课后习题9.6 http://www.dotcpp.com/oj/problem1040.html ****************************************

问题 1042: C语言程序设计教程(第三版)课后习题9.10

/******************************************************************** @file Main.cpp @date 2017-05-28 22:10:10 @author Zoro_Tiger @brief 问题 1042: C语言程序设计教程(第三版)课后习题9.10 http://www.dotcpp.com/oj/problem1042.html ***************************************

问题 1023: C语言程序设计教程(第三版)课后习题7.2

/******************************************************************** @file Main.cpp @date 2017-05-20 22:05:39 @author Zoro_Tiger @brief 问题 1023: C语言程序设计教程(第三版)课后习题7.2 http://www.dotcpp.com/oj/problem1023.html ****************************************

问题 1008: C语言程序设计教程(第三版)课后习题5.6

/******************************************************************** @file Main.cpp @date 2017-5-8 @author Zoro_Tiger @brief 问题 1008: C语言程序设计教程(第三版)课后习题5.6 http://www.dotcpp.com/oj/problem1008.html ***************************************************

问题 1006: C语言程序设计教程(第三版)课后习题5.4

/******************************************************************** @file Main.cpp @date 2017-05-07 @author Zoro_Tiger @brief 问题 1006: C语言程序设计教程(第三版)课后习题5.4 http://www.dotcpp.com/oj/problem1006.html *************************************************