作者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)
1F:推 pk873:必推凤狼 03/30 00:19
2F:推 CaptainWill:活吧,脑袋 囧 03/30 00:26
3F:推 Arashinoon:起来~ 03/30 00:33