3752 字母旋转游戏
問題概要
H,Wが与えられる。H行W列に並んだアルファベットの渦巻きを出力せよ。
渦巻きは右上から時計回りに内部に進む。
解法
それ以上すすめなくなったら右折する。
右折しても進めなかったらマスが全部埋まっているので終了。
ソースコード
int h,w; char ans[100][100]; int dy[]={0,1,0,-1},dx[]={1,0,-1,0}; int main() { cin>>h>>w; int x=0,y=0,c=0,d=0,ny,nx; while(1){ ans[y][x]='A'+c++%26; rep(i,2){ ny=y+dy[d]; nx=x+dx[d]; if(ny<0||nx<0||ny>=h||nx>=w||ans[ny][nx]){ if(i==1)goto END; d=(d+1)%4; continue; } y=ny; x=nx; break; } } END: rep(i,h)rep(j,w)cout<<" "<<ans[i][j]<<(j==w-1?"\n":""); return 0; }