1606 - C翻转
时间限制 : 1 秒
内存限制 : 32 MB
首先输入一个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为左上角的那几个数据。
题目输出
输出翻转后的数组。
输入/输出样例
输入格式
11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 21 22 23 24 25 1 3 2 2 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 1 2 2 1
输出格式
11 12 13 14 15 16 7 2 17 20 1 8 3 18 5 6 9 4 19 10 21 22 23 24 25 11 12 13 14 15 21 16 18 19 20 22 17 23 24 25 1 2 3 4 5 6 7 8 9 10
C语言解答
#include<stdio.h> void Convert(int arr[5][5],int a,int b,int x,int y) { int i,j; if(a==1&&b==2) { int tmp[2][2]; for(i=0;i<2;i++) for(j=0;j<2;j++) tmp[i][j]=arr[x-j][y+i-1]; for(i=0;i<2;i++) for(j=0;j<2;j++) arr[x+i-1][y+j-1]=tmp[i][j]; } if(a==1&&b==3) { int tmp[3][3]; for(i=0;i<3;i++) for(j=0;j<3;j++) tmp[i][j]=arr[x+1-j][y+i-1]; for(i=0;i<3;i++) for(j=0;j<3;j++) arr[x+i-1][y+j-1]=tmp[i][j]; } if(a==2&&b==2) { int tmp[2][2]; for(i=0;i<2;i++) for(j=0;j<2;j++) tmp[i][j]=arr[x+j-1][y-i]; for(i=0;i<2;i++) for(j=0;j<2;j++) arr[x+i-1][y+j-1]=tmp[i][j]; } if(a==2&&b==3) { int tmp[3][3]; for(i=0;i<3;i++) for(j=0;j<3;j++) tmp[i][j]=arr[x+j-1][y+1-i]; for(i=0;i<3;i++) for(j=0;j<3;j++) arr[x+i-1][y+j-1]=tmp[i][j]; } } int main() { int arr[5][5]; int i,j; while(scanf("%d%d%d%d%d",&arr[0][0],&arr[0][1],&arr[0][2],&arr[0][3],&arr[0][4])!=EOF) { for(i=1;i<5;i++) for(j=0;j<5;j++) scanf("%d",&arr[i][j]); int a,b,x,y; scanf("%d%d%d%d",&a,&b,&x,&y); Convert(arr,a,b,x,y); for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(j==4) printf("%d",arr[i][j]); else printf("%d ",arr[i][j]); } printf("\n"); } } return 0; }
C++解答
#include <stdio.h> int main() { // 所有数的数目 int cnt[5][5]; while(~scanf("%d%d%d%d%d",&cnt[0][0],&cnt[0][1],&cnt[0][2],&cnt[0][3],&cnt[0][4])){ for(int i=1;i<5;i++) scanf("%d%d%d%d%d",&cnt[i][0],&cnt[i][1],&cnt[i][2],&cnt[i][3],&cnt[i][4]); int a,b,x,y; scanf("%d%d%d%d",&a,&b,&x,&y); int temp=0; if(a == 1 && b == 2){ temp= cnt[x-1][y-1]; cnt[x-1][y-1] = cnt[x][y-1]; cnt[x][y-1] = cnt[x][y]; cnt[x][y] = cnt[x-1][y]; cnt[x-1][y] = temp; } else if(a == 1 && b == 3){ temp= cnt[x-1][y-1]; cnt[x-1][y-1] = cnt[x+1][y-1]; cnt[x+1][y-1] = cnt[x+1][y+1]; cnt[x+1][y+1] = cnt[x-1][y+1]; cnt[x-1][y+1] = temp; temp= cnt[x-1][y]; cnt[x-1][y] = cnt[x][y-1]; cnt[x][y-1] = cnt[x+1][y]; cnt[x+1][y] = cnt[x][y+1]; cnt[x][y+1] = temp; } else if(a == 2 && b == 2){ temp= cnt[x-1][y-1]; cnt[x-1][y-1] = cnt[x-1][y]; cnt[x-1][y] = cnt[x][y]; cnt[x][y] = cnt[x][y-1]; cnt[x][y-1] = temp; } else if(a == 2 && b == 3){ temp= cnt[x-1][y-1]; cnt[x-1][y-1] = cnt[x-1][y+1]; cnt[x-1][y+1] = cnt[x+1][y+1]; cnt[x+1][y+1] = cnt[x+1][y-1]; cnt[x+1][y-1] = temp; temp= cnt[x-1][y]; cnt[x-1][y] = cnt[x][y+1]; cnt[x][y+1] = cnt[x+1][y]; cnt[x+1][y] = cnt[x][y-1]; cnt[x][y-1] = temp; } for(int i=0;i<5;i++) printf("%d %d %d %d %d\n",cnt[i][0],cnt[i][1],cnt[i][2],cnt[i][3],cnt[i][4]); //我多么想和你再见一面,不再说从前,只是寒暄,陪你聊聊天 //输出一定不要&,输入一定要& } return 0; }