精華區beta NTUE-CS102 關於我們 聯絡資訊
花了點時間生出兩種版本...第三種版本懶得寫 簡易說明三種作法,因為目標一樣,所以只是用什麼東西的差別 這次不帶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