- 题目描述:
-
首先输入一个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 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
题目没有说明那个是x轴,那个是y轴。
这里竖的是x轴,横的是y轴
代码如下1 #include <cstdio> 2 #include <algorithm> 3 int num[6][6]; 4 int tmp[4][4]; 5 6 int main(int argc, char const *argv[]) 7 { 8 //freopen("input.txt","r",stdin); 9 while(scanf("%d",&num[1][1]) != EOF) { 10 for(int i = 2; i <= 5; i++) { 11 scanf("%d",&num[1][i]); 12 } 13 for(int i = 2; i <= 5; i++) { 14 for(int j = 1; j <= 5; j++) { 15 scanf("%d",&num[i][j]); 16 } 17 } 18 int a,b,x,y; 19 scanf("%d %d %d %d",&a,&b,&x,&y); 20 if(a == 2 && b == 2) {//ni 21 int tmp = num[x][y]; 22 num[x][y] = num[x][y+1]; 23 num[x][y+1] = num[x+1][y+1]; 24 num[x+1][y+1] = num[x+1][y]; 25 num[x+1][y] = tmp; 26 } 27 else if(a == 1 && b == 2) {//shun 28 int tmp = num[x][y]; 29 num[x][y] = num[x+1][y]; 30 num[x+1][y] = num[x+1][y+1]; 31 num[x+1][y+1] = num[x][y+1]; 32 num[x][y+1] = tmp; 33 } 34 else if(b == 3) { 35 int tmp[4][4]; 36 for(int i = 1; i <= 3; i++) { 37 for(int j = 1; j <= 3; j++) { 38 tmp[i][j] = num[x+i-1][y+j-1]; 39 } 40 } 41 if(a == 1) { 42 for(int i = 1; i <= 3; i++) { 43 for(int j = 1; j <= 3; j++) { 44 num[x+i-1][y+j-1] = tmp[4-j][i]; 45 } 46 } 47 } 48 else if(a == 2) { 49 for(int i = 1; i <= 3; i++) { 50 for(int j = 1; j <= 3; j++) { 51 num[x+i-1][y+j-1] = tmp[j][4-i]; 52 } 53 } 54 } 55 } 56 for(int i = 1; i <= 5; i++) { 57 printf("%d",num[i][1]); 58 for(int j = 2; j <= 5; j++) { 59 printf(" %d",num[i][j]); 60 } 61 printf(" "); 62 } 63 64 } 65 return 0; 66 }