0133-Rotation of a Pattern
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0133&lang=jp
8x8のパターンを90度・180度・270度回転させる問題。
180度/270度回転は90度回転を複数回行うことで実行可能なので、90度回転のみを考える。
回転行列を考えてやると、回転前の座標をx,yとすると回転後はy,7-xとなることが分かるので、それを実装。
char MAP[8][9];//マップ情報 void rotate(){//マップを90度回転 char bM[8][9]; memcpy(bM,MAP,72); for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ MAP[i][j]=bM[7-j][i]; } } } void showmap(){//マップを出力 for(int i=0;i<8;i++){ printf("%s\n",MAP[i]); } } int main(){ for(int i=0;i<8;i++){ scanf("%s",MAP[i]); } printf("90\n"); rotate(); showmap(); printf("180\n"); rotate(); showmap(); printf("270\n"); rotate(); showmap(); return 0; }