日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

九连环算法--《计算机程序设计艺术》

發布時間:2024/1/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 九连环算法--《计算机程序设计艺术》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前回復一個關于9連環解法的問題,看過《計算機程序設計藝術》的人都知道,這個問題的是中國的古老游戲,其解法就是“格雷二進制”的描述。

?九連環是一種傳統的中國玩具,它有九個連在一起的環河一根長棒組成。一開始,九個環都裝在榜上,由于其特殊的構造,只能按以下規則從棒上取下或裝上環:

1)所有環只能從棒的一端取下。將環按距離這一端的遠近從近到遠依次編號為1~9號環。無論知名移動環,環的順序都不會改變

2)1號環隨時可以取下或裝上

3)當K-1(K=2-9)號之前的環(不包含K-1號環)全部被取下,K-1號環還在棒上時,可將K號環取下或裝上
已有以下兩個函數

UpOne(int idx);//裝上某個序號的環(無法裝上時不會有動作)

DownOne(int idx);//卸下某個序號的環(無法卸下時不會有動作)
請寫出裝上和卸下全部環的函數,并且將具體實現的C#代碼寫出(需用控制臺輸出)

?

有很多網友提出了各種不同的解決方案,也不乏寫了大篇代碼的。

其實這個問題說起來很簡單,下面是我的解決方案

這個問題上帝已經解決把公式描述出來了,是格雷二進制編碼的問題,大師的名字就叫高納德.克努特?

公式就是

T0=空

Tn+1="0"+Tn,"1"+Tn的逆?

參考<<計算機程序設計藝術 第四卷 第二冊>>

比如

T0=空

T1={0,1}?

T2=0{0,1},1{1,0}=00,01,11,10?

T3=0{00,01,11,10},1{10,11,01,00}? =000,001,011,010,110,111,101,100?

...

依次類推 T9=...

這個組合里包含了所有的可能性,注意到按這個方法形成的組合無論往左還是往右,都只有一個位變化了? 比如

“000,001,011,010,110,111,101,100?”:000->001->011->010-110->111->101-100,每一步都只變化了一位

如果是3連環的話,將環套上的順序是

000,001,011,010,110,111

環取下的順序正好相反?

要判斷在每個狀態下具體一個環是否能套上,則判斷該狀態右邊的值是否與該環對應的值不同?

要判斷在每個狀態下具體一個環是否能取下,則判斷該狀態左邊的值是否與該環對應的值不同?

算法就是這樣,是否能套上,就把T(N)預先計算出來,然后逐個對比就OK

轉載于:https://www.cnblogs.com/stst/p/4909734.html

總結

以上是生活随笔為你收集整理的九连环算法--《计算机程序设计艺术》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。