题目描述
首先输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。 操作类型有四种: 1 2 表示:90度,顺时针,翻转4个数 1 3 表示:90度,顺时针,翻转9个数 2 2 表示:90度,逆时针,翻转4个数 2 3 表示:90度,逆时针,翻转9个数
输入描述:
输入有多组数据。 每组输入一个5 * 5的数组,然后输入一行,这一行有四个数,前两个代表操作类型,后两个数x y代表需操作数据为以x y为左上角的那几个数据。
输出描述:
输出翻转后的数组。
示例1
输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 3 1 1
输出
11 6 1 4 5 12 7 2 9 10 13 8 3 14 15 16 17 18 19 20 21 22 23 24 25
#include<bits/stdc++.h>
using namespace std;
int A[6][6];
int B[6][6];
void change(int x,int y,int key,int size){
if(key==1){
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
B[x+j][y+size-i-1]=A[x+i][y+j];
}
}
}else
if(key==2){
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
B[x+size-j-1][y+i]=A[x+i][y+j];
}
}
}
}
int main(){
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
int x;
scanf("%d",&x);
A[i][j]=x;
B[i][j]=x;
}
}
int x,y,key,size;
scanf("%d%d%d%d",&key,&size,&x,&y);
change(x,y,key,size);
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(j==1)
printf("%d",B[i][j]);
else
printf(" %d",B[i][j]);
}
printf("\n");
}
return 0;
}