1171.C翻转
- 题目描述:
-
首先输入一个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
#include<iostream> using namespace std; //这个取地址66666!!! void transform1(int *a){ int temp=*a; *a=*(a+5); *(a+5)=*(a+6); *(a+6)=*(a+1); *(a+1)=temp; } void transform2(int *a){ int da=*a; *a=*(a+10); *(a+10)=*(a+12); *(a+12)=*(a+2); *(a+2)=da; da=*(a+1); *(a+1)=*(a+5); *(a+5)=*(a+11); *(a+11)=*(a+7); *(a+7)=da; } void transform3(int *a){ int temp=*a; *a=*(a+1); *(a+1)=*(a+6); *(a+6)=*(a+5); *(a+5)=temp; } void transform4(int *a){ int da=*a; *a=*(a+2); *(a+2)=*(a+12); *(a+12)=*(a+10); *(a+10)=da; da=*(a+1); *(a+1)=*(a+7); *(a+7)=*(a+11); *(a+11)=*(a+5); *(a+5)=da; } int main(){ int a[5][5]; int f1,f2,i,j,x,y; while(cin>>a[0][0]>>a[0][1]>>a[0][2]>>a[0][3]>>a[0][4]){ for(i=1;i<5;i++){ for(j=0;j<5;j++) { cin>>a[i][j]; } } cin>>f1>>f2>>x>>y; x--; y--; if(f1==1 && f2==2){ transform1(&a[x][y]); } else if(f1==1 && f2==3){ transform2(&a[x][y]); } else if(f1==2 && f2==2){ transform3(&a[x][y]); } else { transform4(&a[x][y]); } } for(i=0;i<5;i++){ for(j=0;j<5;j++) { if(j==0) cout<<a[i][j]; else cout<<" "<<a[i][j]; } cout<<endl; } return 0; }