438
銀河系を征服してみせる!
Wu-Jun Pei@Sprout2018
SOP
1. 處理輸入輸出
int N, M, l, w, Q;
std::cin >> N >> M >> l >> w >> Q;
2. 初始化一些東西
參考程式碼在下一頁
-
我的x是往下長的,Spacecraft_x記的是船的x座標
-
我的y是往右長的,Spacecraft_y記的是船的y座標
-
(Spacecraft_x, Spacecraft_y) 其實代表的就是船左上角的座標位置
2. 初始化一些東西
int Spacecraft_x = 1, Spacecraft_y = 1;
// Set the wall with value -1
for (int i = 0; i <= N + 1; i++) {
mp[i][0] = mp[i][M + 1] = -1;
}
for (int j = 0; j <= M + 1; j++) {
mp[0][j] = mp[N + 1][j] = -1;
}
3. 操作
什麼時候要動?什麼時候不用動?不用動:
-
操作指令不存在(e.g. 7)
-
碰到邊界:
以上下(x坐標系)為例:
如果上面已經到頂了(x == 1),就不能繼續往上走。
下面比較麻煩些(
x + l == Nv.s. x + l - 1 == N),小心那個1的問題。
3. 操作
動:
if (command == 0) {
if (Spacecraft_x > 1){
Spacecraft_x --;
}
} else if (command == 2) {
if (Spacecraft_x < N - l + 1) {
Spacecraft_x ++;
}
}
4. 看成果
把太空船塞進去
一開始把地圖的邊緣弄好了,現在弄中間
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
// Set the spacecraft with value 1
if (Spacecraft_x <= i && i < Spacecraft_x + l
&& Spacecraft_y <= j && j <= Spacecraft_y + w) {
mp[i][j] = 1;
} else {
mp[i][j] = 0;
}
}
}
4. 印出來
// Print the map
for (int i = 0; i <= N + 1; i++) {
for (int j = 0; j <= M + 1; j++) {
if (mp[i][j] == -1) {
std::cout << '#';
} else if (mp[i][j] == 0) {
std::cout << ' ';
} else if (mp[i][j] == 1) {
std::cout << 'S';
}
}
std::cout << std::endl;
}
參考程式碼 1: [Click Me]
聰明的你可能發現這題不需要二維陣列!
參考程式碼 2: [Click Me](沒使用陣列
[Sprout2018] Solution to 438
By Wu-Jun Pei
[Sprout2018] Solution to 438
- 29