作者game0416 (鳳狼)
看板NTUE-CS102
標題Re: [閒聊] 程設作業
時間Mon Mar 29 23:34:36 2010
花了點時間生出兩種版本...第三種版本懶得寫
簡易說明三種作法,因為目標一樣,所以只是用什麼東西的差別
這次不帶code,因為有提到3/31提供code配分...想要參照的私下來問吧
→這方向先叫b
1 : 1 2 3 4 5 6 7 8 9
↓ 2 : 1 2 3 4 5 6 7 8 9
這 3 : 1 2 3 4 5 6 7 8 9
方 4 : 1 2 3 4 5 6 7 8 9
向 5 : 1 2 3 4 5 6 7 8 9
叫 6 : 1 2 3 4 5 6 7 8 9
a 7 : 1 2 3 4 5 6 7 8 9
8 : 1 2 3 4 5 6 7 8 9
9 : 1 2 3 4 5 6 7 8 9
--
實際上應該算四種路線...不過有一種太蠢(?)
其他是各種類變形,思考上應該都是照表格這樣走...吧
: 這篇寫起來感覺應該跟彥廷上次說明的內容差不多
a方向是列,也就是方塊擺置的位置
b方向是方塊堆疊的順序
在這次作業中,不論ab兩種向都能用陣列、串列建造
所以作法大略是
a,b都用陣列
a用陣列,b用串列
a,b都用串列
這樣三種,以第二種在這次作業比較容易想到吧
我是以前寫這題目就用第一種,所以當下直接刻一個出來感覺比較順暢
--
所以說,先來看不分作法的前提下,全部大概要怎樣運作
第一,先建表
先把整個框架作出來...也就是在程式內(更正確來說在程式在腦袋中的樣子)要能有
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
6 : 6
7 : 7
8 : 8
9 : 9
這樣的內容為整個作業第一項目標
--
然後,第二項我會建議先把輸出的部份做出來
這樣才能在後面做主要部份時一邊輸入一邊輸出結果
確認自己的內容有沒有問題...當然目標輸出就長成前頁那樣
第三,就開始做輸入與替換的部份
這部分又拆成三段作
第一段先輸入一或兩個數字,先輸入一個,確定不是0以後再給人輸入第二個數字
: 這部份輸入的建議寫法是
: while (cin >> one){
: balabla
: cin >>two; }
第二段是去尋找要移動的方塊在哪裡 (第一個輸入的數字)
這段看作法決定詳細內容...
反正就是沿著表格先找第一排的b方向,沒有就往下一排找
第三段,就是去把東西接在後面...一樣看作法決定詳細內容
後面拿一堆表格直接示範內容長怎樣
--
首先,來看看這個全陣列式...
第一步驟建表會把整個陣列大概建成這樣
[1] : 1 0 0 0 0 0 0 0 0
[2] : 2 0 0 0 0 0 0 0 0
[3] : 3 0 0 0 0 0 0 0 0
[4] : 4 0 0 0 0 0 0 0 0
[5] : 5 0 0 0 0 0 0 0 0
[6] : 6 0 0 0 0 0 0 0 0
[7] : 7 0 0 0 0 0 0 0 0
[8] : 8 0 0 0 0 0 0 0 0
[9] : 9 0 0 0 0 0 0 0 0
遇0不輸出,因為是陣列,所以一定是這樣9*9展開,小小浪費點空間
再來做示範,固定三個指令去列出來內容這樣
1 2
2 3
3 1
--
1 2,把1及其後移到2
因為之後都是0,所以無意義
結果就是變成
[1] : 0 0 0 0 0 0 0 0 0
[2] : 2 1 0 0 0 0 0 0 0
[3] : 3 0 0 0 0 0 0 0 0
[4] : 4 0 0 0 0 0 0 0 0
[5] : 5 0 0 0 0 0 0 0 0
[6] : 6 0 0 0 0 0 0 0 0
[7] : 7 0 0 0 0 0 0 0 0
[8] : 8 0 0 0 0 0 0 0 0
[9] : 9 0 0 0 0 0 0 0 0
移過去以後,把位置歸零就好
--
2 3,把2跟之後的移到3,我會這樣做...
[1] : 0 0 0 0 0 0 0 0 0
[2] : 0 1 0 0 0 0 0 0 0
[3] : 3 2 0 0 0 0 0 0 0
[4] : 4 0 0 0 0 0 0 0 0
[5] : 5 0 0 0 0 0 0 0 0
[6] : 6 0 0 0 0 0 0 0 0
[7] : 7 0 0 0 0 0 0 0 0
[8] : 8 0 0 0 0 0 0 0 0
[9] : 9 0 0 0 0 0 0 0 0
↓
[1] : 0 0 0 0 0 0 0 0 0
[2] : 0 0 0 0 0 0 0 0 0
[3] : 3 2 1 0 0 0 0 0 0
[4] : 4 0 0 0 0 0 0 0 0
[5] : 5 0 0 0 0 0 0 0 0
[6] : 6 0 0 0 0 0 0 0 0
[7] : 7 0 0 0 0 0 0 0 0
[8] : 8 0 0 0 0 0 0 0 0
[9] : 9 0 0 0 0 0 0 0 0
--
最後3 1,就把整排送回來,結果就長這樣
[1] : 3 2 1 0 0 0 0 0 0
[2] : 0 0 0 0 0 0 0 0 0
[3] : 0 0 0 0 0 0 0 0 0
[4] : 4 0 0 0 0 0 0 0 0
[5] : 5 0 0 0 0 0 0 0 0
[6] : 6 0 0 0 0 0 0 0 0
[7] : 7 0 0 0 0 0 0 0 0
[8] : 8 0 0 0 0 0 0 0 0
[9] : 9 0 0 0 0 0 0 0 0
詳細步驟跟前一步一樣
不會用串列的話,照步驟這樣刻我覺得是算不難....
前提是期中考不要出個題目"限用串列作答",那就過分啦(飛走)
--
第二第三種一起講,因為主要構造是相同的
a方向看喜好作成串列或陣列都好,這裡推薦陣列...串列難寫到爆炸了-_____-
用陣列作的話,是做成個 *class的指標陣列
在建表完的目標會期待長成
[1] : 1-NULL
[2] : 2-NULL
[3] : 3-NULL
[4] : 4-NULL
[5] : 5-NULL
[6] : 6-NULL
[7] : 7-NULL
[8] : 8-NULL
[9] : 9-NULL
請注意的是,:後面那九個數值是九個物件
這樣可以精簡蠻多的記憶體使用...只要記得在結束後delete掉
--
另外一方面,都用串列則是
1 : 1-NULL
|
2 : 2-NULL
|
3 : 3-NULL 這部份我把兩種串列作成不同的類別區分
| 大概是因為這樣才讓code變的很難處理
4 : 4-NULL 看人作法啦hmm
|
5 : 5-NULL
|
6 : 6-NULL
|
7 : 7-NULL
|
8 : 8-NULL
|
9 : 9-NULL
--
然後,尋找與置換,因為陣列比較不佔頁面,這部份用陣列標示
做個小小的輸入變換
1 2
2 3
2 1
首先 1 2...找到1,把NULL配到1之前那一項,這裡是一開始的HEAD或什麼的
然後把1接到2後面
[1] : -NULL
[2] : 2-1-NULL
[3] : 3-NULL
[4] : 4-NULL
[5] : 5-NULL
[6] : 6-NULL
[7] : 7-NULL
[8] : 8-NULL
[9] : 9-NULL
--
2 3
[1] : -NULL
[2] : -NULL
[3] : 3-2-1-NULL
[4] : 4-NULL
[5] : 5-NULL
[6] : 6-NULL
[7] : 7-NULL
[8] : 8-NULL
[9] : 9-NULL
一次移動應該只會需要配一個NULL
2 1 因為在串列最末端也是個NULL
[1] : 2-1-NULL 這部份想通應該不難去做
[2] : -NULL
[3] : 3-NULL
[4] : 4-NULL
[5] : 5-NULL
[6] : 6-NULL
[7] : 7-NULL
[8] : 8-NULL
[9] : 9-NULL
--
題目說難不難,腦袋慢慢開始要活就是了...
各自努力
--
所恐懼的,不是沒有知識的大眾 所憎恨的,不是深沉幽暗的人心
而是自以為是的思考之聲 而是自恃甚高的執法者
所毀滅的,不是溫馨和諧的世界 這是我最後的期許,沒有憤怒、沒有悔恨
而是自欺欺人的夢境 只剩下,渾沌的死亡呼吸
節自 新月神話-弒王者
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.114.76.199
※ 編輯: game0416 來自: 58.114.76.199 (03/29 23:37)
推 pk873:必推鳳狼 03/30 00:19
推 CaptainWill:活吧,腦袋 囧 03/30 00:26
推 Arashinoon:起來~ 03/30 00:33