AOJ 0141 - Spiral Pattern
n=2だけ特別視
#include<iostream> #include<algorithm> #include<cstdio> int main(){ const int MAX_N = 100; const int dx[] = {0, 1, 0, -1}, dy[] = {-1, 0, 1, 0}; int d, n; std::cin >> d; for(int k=0;k<d;k++){ std::cin >> n; if(k > 0){ std::cout << std::endl; } if(n == 2){ std::cout << "##\n# \n"; }else{ int x = 0, y = n-1, p = n-3, angle = 0; int cloth[MAX_N][MAX_N]; for(int i=0;i<n;i++){ std::fill(cloth[i], cloth[i]+n, 0); } for(int i=0;i<3;i++){ cloth[y][x] = 1; for(int j=0;j<n-1;j++){ x += dx[angle]; y += dy[angle]; cloth[y][x] = 1; } angle = (angle + 1) % 4; } while(p > 1){ for(int i=0;i<2;i++){ cloth[y][x] = 1; for(int j=0;j<p;j++){ x += dx[angle]; y += dy[angle]; cloth[y][x] = 1; } angle = (angle + 1) % 4; } p -= 2; } if(n % 2 == 0){//偶数 x += dx[angle]; y += dy[angle]; cloth[y][x] = 1; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(cloth[i][j]){ printf("#"); }else{ printf(" "); } } std::cout << std::endl; } } } }