3752

keyword

C++

概要

問題名:字母旋转游戏
アルファベットを渦巻き状に出力する問題。
実装ゲー。方向とか考えるのは面倒なので、何らかの座標変換して完全に線形にしてしまいたい。

char c;

inline void inc(){
    if(c=='Z') c = 'A';
    else c++;
    return ;
}

int main(){
    int n, m, i, j, k, d;
    int x, y, nx, ny;
    int dx[] = {1,0,-1,0}, dy[] = {0,-1,0,1};
    c = 'A';
    cin >> n >> m;
    vector< vector<char> > board(n+2,vector<char>(m+2,'A'));
    REPONE(i,n)REPONE(j,m) board[i][j] = '-';

    x = y = 1;
    d = 0;
    while(1){
        board[y][x] = c;
        inc();
        REP(k,4){
            ny = y + dy[(d+k)%4];
            nx = x + dx[(d+k)%4];
            if(board[ny][nx] == '-'){
                y = ny;
                x = nx;
                d = (d+k)%4;
                break;
            }
        }
        if(k==4)break;
    }

    REPONE(i,n){
        REPONE(j,m){
            printf("   %c",board[i][j]);
        }
        putchar('\n');
    }

    return 0;
}