作者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
→ borg110878:洗板XD 04/05 19:55
推 j2612280:good~~ 04/05 21:22
推 Arashinoon:我要趕回台北做了 GG 這台電腦沒有C++ 04/05 22:01
推 Arashinoon:不想用你給的網址咧~~~~ 04/05 22:03
推 suan710:樓上學長的網址快用 04/05 23:53
→ j2612280:冏... 04/06 00:02
推 joe989879:超棒!! 04/07 15:13