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;
}