https://atcoder.jp/contests/past202010-open/tasks/past202010_c
解説
https://atcoder.jp/contests/past202010-open/submissions/21465859
シミュレーション問題というか実装問題。
問題文に書かれていることを実装しよう。
今回要求されているような周囲のマスをなめていくには差分を全探索するのがオススメである。
そのマスと上下左右ななめに隣接したマスということはそのマスからのx,yの差分がどちらも[-1,1]の範囲内のマスであるということになる。
この範囲を全探索して、自分の座標に足し合わせて隣接マスの座標を得よう。
外にはみ出してしまう可能性があるので、境界チェックをちゃんと行う事。
int H, W; string S[30]; //--------------------------------------------------------------------------------------------------- void _main() { cin >> H >> W; rep(y, 0, H) cin >> S[y]; rep(y, 0, H) { rep(x, 0, W) { char c = '0'; rep(dx, -1, 2) rep(dy, -1, 2) { int xx = x + dx; int yy = y + dy; if (0 <= xx && xx < W && 0 <= yy && yy < H) { if (S[yy][xx] == '#') c++; } } printf("%c", c); } printf("\n"); } }