北航上机:二维数组旋转
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;
} 
