作者yantchen (球童Yanting)
看板NTUE-CS102
标题[课业] 搬方块简单版
时间Mon Apr 5 19:53:49 2010
说好3/31的时候要PO的程式码
抱歉慢了几天XD 看在期限延後大家就不要这麽在意了 哈哈
---
先review一下问题(简单版)
有两个区域 跟六个方块 分别堆成
---┐
1 │→[1]→[2]→[3]→NULL
---┘
---┐
2 │→[4]→[5]→[6]→NULL
---┘
这次我用到的class
class block
{
int data;
block *next;
public:
int getdata()
{
return data;
}
void setdata(int d)
{
data=d;
}
block *getnext()
{
return next;
}
void setnext(block *n)
{
next=n;
}
};
用的都是之前的东西 没有新的
然後是main
首先把东西堆成一开始的样子
int main()
{
// 准备两个head(区域1,2)
// 六个方块(b[0]不用)
// *p,*q是while那里搜寻用的
block head1, head2, b[7], *p, *q;
int i, x, y;
// 把方块上面设定数字
for(i=1;i<=6;i++)
{
b[i].setdata(i);
}
// 串起来!
head1.setnext(&b[1]);
b[1].setnext(&b[2]);
b[2].setnext(&b[3]);
b[3].setnext(NULL);
head2.setnext(&b[4]);
b[4].setnext(&b[5]);
b[5].setnext(&b[6]);
b[6].setnext(NULL);
这里要很清楚 . 和 -> 的差别
setnext是block的函数
所以block的
物件 例如
block a;
就要用
a.setnext(somethnig);
如果是block的
指标 例如
block *p;
就要用
p->setnext(somethnig);
设定好之後
就是输入x,y的无穷主回圈
// cout
cout<<"请输入x,y 将方块x移到区域y(x=1~6, y=1~2),";
cout<<"输入0 0印出目前各区域上的方块\n\n";
// 主回圈
while(true)
{
cout<<"请输入x,y 将方块x移到区域y: ";
cin>>x>>y;
// 输入0 0
if(x*y==0)
{
// 印出第一区
cout<<"1: ";
p=head1.getnext();
while(p!=NULL)
{
cout<<p->getdata()<<" ";
p=p->getnext();
}
cout<<endl;
// 印出第二区
cout<<"2: ";
p=head2.getnext();
while(p!=NULL)
{
cout<<p->getdata()<<" ";
p=p->getnext();
}
cout<<endl;
}
// 不是0 0
else
{
// 假设要找的方块x在第一区
p=&head1;
while(p!=NULL && p->getdata()!=x)
{
q=p;
p=p->getnext();
}
// 找不到=>在第二区
if(p==NULL || p->getdata()!=x)
{
p=&head2;
while(p!=NULL && p->getdata()!=x)
{
q=p;
p=p->getnext();
}
}
// q是原本方块前面的那个人, 通知他一下後面没人了
q->setnext(NULL);
// 看要移到哪区 找那区的最後一个人
if(y==1) p=&head1; else p=&head2;
while(p!=NULL)
{
q=p;
p=p->getnext();
}
// 接上去!
q->setnext(&b[x]);
}
}
}
步骤很简单
假设输入 1,2
就是把 方块1 移到 区域2
所以要
1. 先找到 方块1 前面的人
接NULL
方块1 可能在 区域1 或是 区域2
可以先假设它在 区域1 找不到 再找 区域2
找到她前面的人 再接NULL
2. 接着就串列跟插後面一样 去 区域2(要移到的地方) 找最後面
接上 方块1
3. 完成了
程式码全部贴起来 就可以work了
这样可以拿到一分
看懂用自己的方法写 可以拿到2分
写9区9方块 可以拿到3分
作业
该交的时间是星期三半夜
大家加油罗XD!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.127.36.183
1F:→ borg110878:洗板XD 04/05 19:55
2F:推 j2612280:good~~ 04/05 21:22
3F:推 Arashinoon:我要赶回台北做了 GG 这台电脑没有C++ 04/05 22:01
5F:推 Arashinoon:不想用你给的网址咧~~~~ 04/05 22:03
7F:推 suan710:楼上学长的网址快用 04/05 23:53
8F:→ j2612280:冏... 04/06 00:02
9F:推 joe989879:超棒!! 04/07 15:13