九度oj:对矩阵任意子方阵进行多种翻转操作

来源:互联网 发布:json字符串转为map 编辑:程序博客网 时间:2024/05/22 17:36
/*题目描述:首先输入一个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 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 2526 27 28 29 3031 32 33 34 351 3 1 1样例输出:11 6 1 4 512 7 2 9 1013 8 3 14 1516 17 18 19 2021 22 23 24 25*/#include <iostream>#include <stdio.h>using namespace std;int main(){    int num[5][5];    while(scanf("%d",&num[0][0])!=-1)    {        int temp[3][3];        for(int i=0;i<5;i++)            for(int j=0;j<5;j++)        {            if(i==0&&j==0)                continue;            else               cin>>num[i][j];        }        int num1,num2,x,y;        cin>>num1>>num2>>x>>y;        if(num1==1&&num2==2)        {            for(int i=0;i<2;i++)                for(int j=1;j>=0;j--)                   temp[i][j]=num[x-j][y+i-1];            for(int i=0;i<2;i++)                for(int j=0;j<2;j++)                   num[x+i-1][y+j-1]=temp[i][j];        }        if(num1==1&&num2==3)        {            for(int i=0;i<3;i++)                for(int j=2;j>=0;j--)                   temp[i][j]=num[x-j+1][y+i-1];            for(int i=0;i<3;i++)                for(int j=0;j<3;j++)                   num[x+i-1][y+j-1]=temp[i][j];        }        if(num1==2&&num2==2)        {            for(int i=0;i<2;i++)                for(int j=0;j<2;j++)                    temp[i][j]=num[x+j-1][y-i];            for(int i=0;i<2;i++)                for(int j=0;j<2;j++)                   num[x+i-1][y+j-1]=temp[i][j];        }        if(num1==2&&num2==3)        {            for(int j=0;j<3;j++)                for(int i=0;i<3;i++)                    temp[i][j]=num[x+j-1][y-i+1];            for(int i=0;i<3;i++)                for(int j=0;j<3;j++)                   num[x+i-1][y+j-1]=temp[i][j];        }        for(int i=0;i<5;i++)            for(int j=0;j<5;j++)        {            if(j==4)                cout<<num[i][j]<<endl;            else                cout<<num[i][j]<<" ";        }    }    return 0;}

原创粉丝点击