题目描述
首先输入一个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
分析
用的方法比较笨,比较暴力,挨个交换。
代码
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <iostream> #include <vector> #include <queue> using namespace std;
int main() { int num[6][6], n, m, x, y; for(int i = 1; i <=5; i ++ ) for(int j = 1; j <= 5; j ++) cin>>num[i][j]; cin>>n>>m>>x>>y; if(n==1&&m==2){ int tem = num[x][y]; num[x][y] = num[x+1][y]; num[x+1][y] = num[x+1][y+1]; num[x+1][y+1] = num[x][y+1]; num[x][y+1] = tem; }else if(n==1&&m==3){ int tem = num[x][y]; num[x][y] = num[x+2][y]; num[x+2][y] = num[x+2][y+2]; num[x+2][y+2] = num[x][y+2]; num[x][y+2] = tem; tem = num[x][y+1]; num[x][y+1] = num[x+1][y]; num[x+1][y] = num[x+2][y+1]; num[x+2][y+1] = num[x+1][y+2]; num[x+1][y+2] = tem; }else if(n==2&&m==2){ int tem = num[x][y]; num[x][y] = num[x][y+1]; num[x][y+1] = num[x+1][y+1]; num[x+1][y+1] = num[x+1][y]; num[x+1][y] = tem; }else if(n==2&&m==3){ int tem = num[x][y]; num[x][y] = num[x][y+2]; num[x][y+2] = num[x+2][y+2]; num[x+2][y+2] = num[x+2][y]; num[x+2][y] = tem; tem = num[x][y+1]; num[x][y+1] = num[x+1][y+2]; num[x+1][y+2] = num[x+2][y+1]; num[x+2][y+1] = num[x+1][y]; num[x+1][y] = tem; } for(int i = 1; i <= 5;i ++){ for(int j = 1; j <= 5; j ++){ cout<<num[i][j]; if(j==5) cout<<endl; else cout<<" "; } } return 0; }
|