⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 爱因斯坦的思考题.txt

📁 爱因斯坦的思考题 二叉树算法集 分解质因数新解 石子归并问题等有趣的C程序
💻 TXT
字号:
在网上看到了个有趣的逻辑推理题,爱因斯坦声称世界上只有2%的人能解出:

有五个具有五种不同颜色的房间排成一排;

每个房间里分别住着一个不同国籍的人;

每个人都在喝一种特定品牌的饮料,抽一特定品牌的烟,养一特定的宠物;

没有任意两个人在抽相同品牌的香烟,或喝相同品牌的饮料,或养相同的宠物。

  问题:谁在养鱼作为宠物? 

  爱因斯坦给出如下线索:


英国人住在红色的房子里;

瑞典人养狗作为宠物;

丹麦人喝茶;

绿房子紧挨着白房子,在白房子的左边;

绿房子的主人喝咖啡;

抽Pall Mall牌香烟的人养鸟;

黄色房子里的人抽Dunhill牌香烟;

住在中间那个房子里的人喝牛奶;

挪威人住在第一个房子里面;

抽Blends牌香烟的人和养猫的人相邻;

养马的人和抽Dunhill牌香烟的人相邻;

抽BlueMaster牌香烟的人和啤酒;

德国人抽Prince牌香烟;

挪威人和住在蓝房子的人相邻;

抽Blends牌香烟的人和喝矿泉水的人相邻。
编了一个,比较粗糙,比较复杂,敬请改进:

           
           国家           房子           宠物           饮料           香烟
           挪威           黄色             猫         矿泉水        Dunhill
           丹麦           蓝色             马             茶         Blends
           英国           红色             鸟           牛奶       PallMall
           德国           绿色             鱼           咖啡         Prince
           瑞典           白色             狗           啤酒     BlueMaster
 

*/

#include<stdlib.h>
#include <stdio.h>
#include<string.h>

int main(void)
{
 FILE *fp;
 char data[5][40]={"国家","房子","宠物","饮料","香烟"};
 char country[6][40]={" "," "," "," "," "," "};
 char house[6][40]={" "," "," "," "," "," "};
 char pet[6][40]={" "," "," "," "," "," "};
 char drink[6][40]={" "," "," "," "," "," "}; 
 char smoke[6][40]={" "," "," "," "," "," "};
 int i, j, k, l, m, n, o, p, q, r, s, t;
 bool A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12;
 
 if ((fp=fopen("sdfg.txt","w+")) == NULL)
  {
    fprintf(stderr,"\nError opening file \n");
   exit(1);
  }  
 strcpy(country[1],"挪威");//挪威人住在第一个房子里面
 strcpy(house[2],"蓝色");
 strcpy(drink[3],"牛奶");// 住在中间那个房子里的人喝牛奶
  
 for(i=1; i<6; i++)
  for(j=1; j<6; j++)
   for(k=1; k<5; k++)
    for(l=1; l<6; l++)
     for(m=1; m<6; m++)
      for(n=1; n<6; n++)
       for(o=1; o<6; o++)
       {  
        A1 = (i!=1 && i!=2 );//英国人住在红色的房子里;根据房子和国家判断 
        A2 = (j!=1 && j!=i ); //瑞典人养狗作为宠物;根据国家和宠物判断 
         A3 = (k>3 && k!=i);//绿房子的主人喝咖啡;绿房子紧挨着白房子,在白房子的左边;根据房子和国家判断  
        A4 = (l!=1 && l!=3 && l!=i && l!=j && l!=k); //丹麦人喝茶;根据国家和饮料判断
        A5 = (m!=j);//抽Pall Mall牌香烟的人养鸟;根据香烟和宠物判断
        A6 = (n!=2 && n!=i && n!=k && n!=m); //黄色房子里的人抽Dunhill牌香烟;根据房子和香烟判断  
        A7 = (o!=3 && o!=k && o!=l && o!= m && o!=n );//抽BlueMaster牌香烟的人和啤酒;根据香烟和饮料判断 
        if(A1&&A2&&A3&&A4&&A5&&A6&&A7)
        {
         p = 15-1-i-j-l;  //德国人抽Prince牌香烟 ,根据国家判断 
         q = 15-m-n-o-p; //抽Blends牌香烟的人和养猫的人相邻,根据香烟判断 
         A8 = (p!=1 && p!=i && p!=j && p!=l && p!=m && p!=n && p!=o);//德国人抽Prince牌香烟 ,
         A9 = (q!=m && q!=n && q!=o && q!=p); //抽Blends牌香烟的人和养猫的人相邻,
         if(A8&&A9) 
         {
          if(q>1 && (q-1)!=j && (q-1)!=m)//抽Blends牌香烟的人和养猫的人相邻,根据宠物判断 
          {
           strcpy(pet[q-1], "猫");
           if(n>1 && (n-1)!=j && (n-1)!=m) 
           {
            strcpy(pet[n-1], "马");
            t = 15-(q-1)-(n-1)-j-m;
            strcpy(pet[t], "鱼");
           }
           else if(n<5 && (n+1)!=j && (n+1)!=m) 
           {
            strcpy(pet[n+1], "马");
            t = 15-(q-1)-(n+1)-j-m;
            strcpy(pet[t], "鱼");
           }
          }
          else if(q<5  && (q+1)!=j && (q+1)!=m)
          {
           strcpy(pet[q+1], "猫");
           if(n>1 && (n-1)!=j && (n-1)!=m) 
           {
            strcpy(pet[n-1], "马");
            t = 15-(q+1)-(n-1)-j-m;
            strcpy(pet[t], "鱼");
           }
          else if(n<5 && (n+1)!=j && (n+1)!=m) 
           {
            strcpy(pet[n+1], "马");
            t = 15-(q+1)-(n+1)-j-m;
            strcpy(pet[t], "鱼");
           }
          }
          //抽Blends牌香烟的人和喝矿泉水的人相邻,根据饮料判断 
          if(q>1 && (q-1)!=3 && (q-1)!=k && (q-1)!=l && (q-1)!=o)
            strcpy(drink[q-1],"矿泉水"); 
          else if(q<5 && (q+1)!=3 && (q+1)!=k && (q+1)!=l && (q+1)!=o)
            strcpy(drink[q+1],"矿泉水"); 
            //养马的人和抽Dunhill牌香烟的人相邻,根据宠物判断
         //抽Blends牌香烟的人和养猫的人相邻,根据宠物判断 
         if((q>1 && (q-1)!=j && (q-1)!=m) ||(q<5  && (q+1)!=j && (q+1)!=m))
         //抽Blends牌香烟的人和喝矿泉水的人相邻,根据饮料判断 
          if((q>1 && (q-1)!=3 && (q-1)!=k && (q-1)!=l && (q-1)!=o) ||(q<5 && (q+1)!=3 && (q+1)!=k && (q+1)!=l && (q+1)!=o))  
             //养马的人和抽Dunhill牌香烟的人相邻,根据宠物判断  
             if((n>1 && (n-1)!=j && (n-1)!=m) || (n<5 && (n+1)!=j && (n+1)!=m))
           {  strcpy(country[i],"英国");//英国人住在红色的房子里;
             strcpy(house[i],"红色");
             strcpy(country[j],"瑞典"); //瑞典人养狗作为宠物;
             strcpy(pet[j], "狗");
            strcpy(house[k],"绿色");//绿房子紧挨着白房子,在白房子的左边;                       
              strcpy(house[k+1],"白色") ;
            strcpy(drink[k],"咖啡"); //绿房子的主人喝咖啡;
            strcpy(country[l],"丹麦");//丹麦人喝茶;
            strcpy(drink[l],"茶"); 
             strcpy(smoke[m],"PallMall");//抽Pall Mall牌香烟的人养鸟;
             strcpy(pet[m],"鸟");
             strcpy(house[n],"黄色"); //黄色房子里的人抽Dunhill牌香烟
             strcpy(smoke[n],"Dunhill");  
             strcpy(smoke[o],"BlueMaster");//抽BlueMaster牌香烟的人和啤酒 
             strcpy(drink[o],"啤酒");
            strcpy(country[p],"德国");//德国人抽Prince牌香烟
             strcpy(smoke[p],"Prince"); 
             strcpy(smoke[q],"Blends"); //抽Blends牌香烟的人和养猫的人相邻,  
            
            fprintf(fp,"\n"); 
            fprintf(stdout, "\n");
            for(r=0; r<5; r++)  
            {
             fprintf(stdout, "%15s", data[r]);
             fprintf(fp,"%15s", data[r]);
            }
            fprintf(fp,"\n"); 
            fprintf(stdout, "\n");
            for(s=1; s<6; s++)
            {
             fprintf(stdout, "%15s", country[s]);
             fprintf(stdout, "%15s", house[s]);
             fprintf(stdout, "%15s", pet[s]);
             fprintf(stdout, "%15s", drink[s]);
             fprintf(stdout, "%15s", smoke[s]);
             fprintf(stdout, "\n"); 
             fprintf(fp,"%15s", country[s]);
             fprintf(fp,"%15s", house[s]);
             fprintf(fp,"%15s", pet[s]);
             fprintf(fp,"%15s", drink[s]);
             fprintf(fp,"%15s", smoke[s]);
             fprintf(fp,"\n"); 
             fflush(fp);
            } 
           }
          }
        }
       }
 fclose(fp);
  system("pause"); 
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -