問題
http://yukicoder.me/problems/no/401
N行N列のマスに中心に向かって渦を巻くような順番に1から順に数字を埋める。
(埋め方は問題文が分かりやすい)
どのように埋まるか出力せよ。
1 <= N <= 30
考察
1. 実装力が問われている
2. こういう問題の実装はやったことがあったのでそれを書くだけ
3. (若干大変)
4. 左上(0,0)から初めて方向を変えながら座標を変えていく -> next()
5. その順番で埋めて出力する
実装
http://yukicoder.me/submissions/106080
int N; int ans[30][30]; //----------------------------------------------------------------- int x, y, d; int dx[4] = { 0, 1, 0, -1 }; int dy[4] = { -1, 0, 1, 0 }; void next() { int xx = x + dx[d]; int yy = y + dy[d]; if (xx < 0 || N <= xx) { d = (d + 1) % 4; xx = x + dx[d]; yy = y + dy[d]; } else if (yy < 0 || N <= yy) { d = (d + 1) % 4; xx = x + dx[d]; yy = y + dy[d]; } else if (ans[yy][xx] != 0) { d = (d + 1) % 4; xx = x + dx[d]; yy = y + dy[d]; } x = xx; y = yy; } //----------------------------------------------------------------- int main() { cin >> N; x = 0, y = 0, d = 1; int idx = 1; rep(i, 0, N*N) { ans[y][x] = idx; next(); idx++; } rep(yy, 0, N) { rep(xx, 0, N) printf("%03d ", ans[yy][xx]); printf("\n"); } }