?? 愛因斯坦的思考題.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 + -