# 資訊一乙Week13作業
## 題目敘述
給定一個編號N 產生編號 1 ~ N 的Circular Queue,分別有兩個人X先生與Y先生。
X先生從 1 往逆時針的方向走a 步,Y先生從N 往順時針的方向走b 步。若每次走到一個新位置之後,那個位置就再也不會走到了。
請設計一支程式能夠印出每次X先生與Y先生走到的位置。
輸入格式: 有多行測資,每行有三個數字N, a 及b(0 < N < 20, a, b > 0),N 代表此CircularQueue 的大小,a, b 分別為X先生及Y先生的步數。當N = a = b = 0 時結束程式。
輸出格式: 根據每筆測資輸出踩到的編號,輸出時請輸出範圍(field)是 3 的編號。每次都是先列出逆時針的人走到的位置,再來印出順時針的人走到的位置。如果走到位置相同,印一個數字即可。每個回合之間用 ',' 做分隔。
範例輸入:
```
10 4 3
0 0 0
```
範例輸出:
```
4 8, 9 5, 3 1, 2 6, 10, 7
```
~~*好啦這個輸出我還是不知道是三小(題目敘述原始檔是pdf)*~~
~~*總之我是用全部%3d就是了*~~
___
## 我的做法
這一題我4用陣列做的,利用一個陣列,判斷有走過的位置就寫1,沒走過就是0
### 仙貝韓式
一個陣列 **walked** 就是判斷那個點有沒有走過,**aNow** 其實是X先生的位置啦,~~只是都寫好了就不改了~~,**size**就是這個circular queue的大小
這個函式就是讓aNow右移一格,這裡要注意右移如果超出大小要記得移到最左邊,還要注意這格有沒有被走過(```walked==1```)...等等的,可以自己想想看怎麼寫
```c
int rightMove(int* walked, int aNow, int size)
```
例(右移一格):



有右移就有左移嘛
```c
int leftMove(int* walked, int bNow, int size)
```
這裡增加一個**step**來看右移幾格,~~實際上就是```rightMove```跑for迴圈啦~~
```c
int rightStep(int* walked, int aNow, int size, int step)
```
~~左右對稱才有美感~~
```c
int leftStep(int* walked, int bNow, int size, int step)
```
### 主函式
```c
int main(){
/*
先創一個size大小的walked陣列並初始化為零
接著開始跑迴圈讓X向右 Y向左 設walked=1 print...
跑到walked陣列裡都是1就行囉,是不是很簡單呢 (。U。)b
*/
}
```
___
## 遇到的問題
我一開始是X停到甚麼地方就立刻設walked為1,Y也是
但實際上他要我們做的是X往右跑,先不要管X跑到哪,Y先往左跑,到定點之後再把X跟Y的位置設為walked = 1,結束這一回合。
所以我**原本**的寫法會變這樣




Y3會出現錯誤,因為題目的意思,這一輪還沒結束,所以X3的walked不應被標為1

___
大概4這樣,有錯的話歡迎糾正