北航上机:二维数组旋转
C翻转
http://www.nowcoder.com/questionTerminal/a591300637874f6ba2316a5fe3e94579
完成得很不优雅,比较暴力
#include <stdio.h> int map[6][6]; int temp[6][6]; void copy() { for(int i=1; i<=5; i++) for(int j=1; j<=5; j++) temp[i][j]=map[i][j]; return; } void convert(int A,int B,int i,int j) { copy(); if(A==1) { //顺时针 if(B==2) { //翻转四个数 temp[i][j]=map[i+1][j]; temp[i][j+1]=map[i][j]; temp[i+1][j]=map[i+1][j+1]; temp[i+1][j+1]=map[i][j+1]; } if(B==3) { //9个数 temp[i][j]=map[i+2][j]; temp[i][j+1]=map[i+1][j]; temp[i][j+2]=map[i][j]; temp[i+1][j]=map[i+2][j+1]; temp[i+1][j+2]=map[i][j+1]; temp[i+2][j]=map[i+2][j+2]; temp[i+2][j+1]=map[i+1][j+2]; temp[i+2][j+2]=map[i][j+2]; } } if(A==2) { //逆时针 if(B==2) { //翻转四个数 temp[i][j]=map[i][j+1]; temp[i][j+1]=map[i+1][j+1]; temp[i+1][j]=map[i][j]; temp[i+1][j+1]=map[i+1][j]; } if(B==3) { //9个数 temp[i][j]=map[i][j+2]; temp[i][j+1]=map[i+1][j+2]; temp[i][j+2]=map[i+2][j+2]; temp[i+1][j]=map[i][j+1]; temp[i+1][j+2]=map[i+2][j+1]; temp[i+2][j]=map[i][j]; temp[i+2][j+1]=map[i+1][j]; temp[i+2][j+2]=map[i+2][j]; } } return; } int main() { int a,b,c,d,e; int A,B,C,D; while(scanf("%d %d %d %d %d",&a,&b,&c,&d,&e)!=EOF) { map[1][1]=a; map[1][2]=b; map[1][3]=c; map[1][4]=d; map[1][5]=e; for(int i=2; i<=5; i++) { for(int j=1; j<=5; j++) scanf("%d",&map[i][j]); } scanf("%d%d%d%d",&A,&B,&C,&D); convert(A,B,C,D); for(int i=1; i<=5; i++) for(int j =1; j<=5; j++) { printf("%d",temp[i][j]); if(j!=5) printf(" "); else printf("\n"); } } return 0; }