国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#輕松解決世紀迷題

2024-07-21 02:19:42
字體:
來源:轉載
供稿:網友
下面的問題相信很多人都聽過:
1 有五棟五種顏色的房子
2 每一位房子的主人國籍都不同
3 這五個人每人只喝一種飲料,只抽一種牌子的香煙,只養一種寵物
4 沒有人有相同的寵物,抽相同牌子的香煙,喝相同的飲料

提示:

1、 英國人住在紅房子里
2 、瑞典人養了一條狗
3 、丹麥人喝茶
4 、綠房子在白房子左邊
5 、綠房子主人喝咖啡
6 、抽pall mall煙的人養了一只鳥
7 、黃房子主人抽dunhill煙
8 、住在中間那間房子的人喝牛奶
9 、挪威人住第一間房子
10 、抽混合煙的人住在養魚人的旁邊
11 、養馬人住在dunhill煙的人旁邊
12 、抽blue master煙的人喝啤酒
13、 德國人抽prince煙
14 、挪威人住在藍房子旁邊
15 、抽混合煙的人的鄰居喝礦泉水

問題是: 誰養魚?
這道迷題出自1981年柏林的德國邏輯思考學院。據說世界上只有2%的人能出答案。就連大名鼎鼎的愛因斯坦也成為此題大傷腦筋,所以這道題也經常被國內外知名公司用做面試題目,相信許多朋友都只做出過一個答案,如果碰巧你屬于那98%該怎么辦呢。沒關系,如果這個問題用電腦來解決就非常easy了。
程序代碼如下:
using system;

namespace netsafe.math
{

public class ayst
{


/// <summary>
/// 問題中的所有元素
/// </summary>
string[,] data= {{"黃房子", "藍房子", "白房子", "紅房子", "綠房子"},
{"挪威人", "英國人", "德國人", "丹麥人", "瑞典人"},
{"dunhill", "prince", "混合煙", "pall mall", "blue master"},
{"咖 啡", "礦泉水", "茶", "牛奶", " 啤酒 "},
{"魚", " 恐龍", "馬", "鳥", "狗"}};


/// <summary>
/// answer用來存放答案
/// </summary>
int[,] answer=new int[6, 6];

int[,] all=new int[6,122];
int count=1;
int nlevel = 0;
int[] list=new int[6];
public static void main(string[] args)
{
ayst c=new ayst();
c.p(); ///生成全排列到all
c.run();
console.read(); /// 按任意鍵繼續

}
void run()
{
int i1,i2,i3,i4,i5;
///通過邏輯條件順序的有效選擇來優化程序
for (i1=1;i1<=120;i1++) ///房子
{
/// 9 、挪威人住第一間房子
/// 14 、挪威人住在藍房子旁邊
/// 不滿足條件就短路
///

if (all[2,i1]!=2)continue;


for(int j=0;j<5;j++,answer[j,1]=all[j,i1]);
for (i2=1;i2<=120;i2++) ///人種
{

for(int j=0;j<5;j++,answer[j,2]=all[j,i2]);
/// 9 、挪威人住第一間房子
if (all[1,i2]!=1)continue;
///1、 英國人住在紅房子里
///
if (find(1,4)!=find(2,2))continue;

/// 4 、綠房子在白房子左邊
///
if (find(1,5)>find(1,3))continue;


for (i3=1;i3<=120;i3++) ///煙
{

for(int j=0;j<5;j++,answer[j,3]=all[j,i3]);
/// 13、 德國人抽prince煙
///
if(find(2,3)!=find(3,2))continue;
/// 7 、黃房子主人抽dunhill煙
///
if(find(1,1)!=find(3,1))continue;


for (i4=1;i4<=120;i4++) ///飲料
{

for(int j=0;j<5;j++,answer[j,4]=all[j,i4]);
/// 8 、住在中間那間房子的人喝牛奶
///
if(all[3,i4]!=4)continue;

/// 5 、綠房子主人喝咖啡
///
if (find(1,5)!=find(4,1))continue;

/// 3 、丹麥人喝茶
///
if(find(2,4)!=find(4,3))continue;

/// 15 、抽混合煙的人的鄰居喝礦泉水

if(math.abs(find(3,3)-find(4,2))!=1)continue;
/// 12 、抽blue master煙的人喝啤酒
///

if(find(3,5)!=find(4,5))continue;

for (i5=1;i5<=120;i5++) ///寵物
{

for(int j=0;j<5;j++,answer[j,5]=all[j,i5]);
/// 10 、抽混合煙的人住在養魚人的旁邊
///
if(math.abs(find(3,3)-find(5,1))!=1)continue;

/// 2 、瑞典人養了一條狗
///
if(find(2,5)!=find(5,5))continue;
/// 6 、抽pall mall煙的人養了一只鳥
///
if(find(3,4)!=find(5,4))continue;
/// 11 、養馬人住在dunhill煙的人旁邊
///

if(math.abs(find(5,3)-find(3,1))!=1)continue;
///
///能活到這里的data,當然是答案嘍
///
write_answer();

}

}
}

}
}
}


/// <summary>
/// 非常典型的用遞歸實現排列組合算法。
/// </summary>
public void p()
{
int ncount,njudge,key;
nlevel++;
if(nlevel>5)
{
writeall();///有一種排列就寫到all數組里
nlevel--;
return;
}

for(ncount=1;ncount<=5;ncount++)
{
key=0;
for(njudge=0;njudge<=nlevel-1;njudge++)
if(ncount==list[njudge])
{
key=1;
break;
}

if(key==0)
{
list[nlevel]=ncount;
p();
}
}
nlevel--;
}

/// <summary>
/// 寫入all數組
/// </summary>

void writeall()
{
int i;
for (i=1;i<=5;i++)
{
all[i,count]=list[i];
}
count++;
}

int find(int i,int j)
{

int k;
for(k=0;k<=5;k++)
{
if (answer[k,i]==j)
{
return k;
}
}
return -1;
}

/// <summary>
/// 將答案打印出來
/// </summary>
void write_answer()
{

for (int i = 1;i<=5;i++)
{
for(int j=1 ;j<=5;j++)
{
console.write(data[i-1,answer[j,i]-1]+",");

}
console.writeline();
}
console.writeline();
}
}
}
說明:程序使用c#,在microsoft visual studio.net下編譯執行通過。如果你沒有microsoft visual c# 需要安裝microsoft(r) .net framework sdk ,把上述代碼保存到ayst.cs,然后在命令行模式下執行csc ayst.cs ,然后執行ayst.exe也可以。這個程序是很久之前寫的。當時只是為了得到答案,所以程序寫的比較亂。讓同行見笑了。以下是程序的運行結果(答案一總7種,沒想到吧):
黃房子,藍房子,紅房子,綠房子,白房子,
挪威人,丹麥人,英國人,德國人,瑞典人,
dunhill,混合煙,pall mall,prince,blue master,
礦泉水,茶,牛奶,咖 啡, 啤酒 ,
魚,馬,鳥, 恐龍,狗,

綠房子,藍房子,黃房子,紅房子,白房子,
挪威人,德國人,瑞典人,英國人,丹麥人,
混合煙,prince,dunhill,blue master,pall mall,
咖 啡,礦泉水,牛奶, 啤酒 ,茶,
恐龍,魚,狗,馬,鳥,

綠房子,藍房子,白房子,黃房子,紅房子,
挪威人,德國人,瑞典人,丹麥人,英國人,
pall mall,prince,混合煙,dunhill,blue master,
咖 啡,礦泉水,牛奶,茶, 啤酒 ,
鳥,魚,狗, 恐龍,馬,

綠房子,藍房子,白房子,黃房子,紅房子,
挪威人,德國人,瑞典人,丹麥人,英國人,
pall mall,prince,混合煙,dunhill,blue master,
咖 啡,礦泉水,牛奶,茶, 啤酒 ,
鳥, 恐龍,狗,魚,馬,

綠房子,藍房子,白房子,紅房子,黃房子,
挪威人,德國人,瑞典人,英國人,丹麥人,
pall mall,prince,混合煙,blue master,dunhill,
咖 啡,礦泉水,牛奶, 啤酒 ,茶,
鳥,魚,狗,馬, 恐龍,

綠房子,藍房子,紅房子,黃房子,白房子,
挪威人,德國人,英國人,丹麥人,瑞典人,
pall mall,prince,混合煙,dunhill,blue master,
咖 啡,礦泉水,牛奶,茶, 啤酒 ,
鳥,魚,馬, 恐龍,狗,

綠房子,藍房子,紅房子,黃房子,白房子,
挪威人,德國人,英國人,丹麥人,瑞典人,
pall mall,prince,混合煙,dunhill,blue master,
咖 啡,礦泉水,牛奶,茶, 啤酒 ,
鳥, 恐龍,馬,魚,狗,


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 介休市| 安化县| 那曲县| 嵊州市| 项城市| 广元市| 荥经县| 嘉祥县| 文山县| 南皮县| 色达县| 克山县| 浠水县| 汨罗市| 阳城县| 西贡区| 夹江县| 华阴市| 平山县| 丁青县| 连云港市| 莱州市| 微山县| 红河县| 宁河县| 宜都市| 保山市| 灵石县| 鸡泽县| 洪洞县| 古浪县| 陵水| 吴桥县| 博湖县| 河东区| 泾阳县| 金塔县| 河间市| 永丰县| 黔西县| 旬阳县|