BUPT复试专题—C翻转

Posted Donser

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUPT复试专题—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

输入

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>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string.h>
using namespace std;
int a[10][10];
void turn1(int x,int y)
{
    int temp[10][10];
    temp[1][1]=a[x+2][y];temp[1][2]=a[x+1][y];temp[2][1]=a[x+2][y+1];temp[2][2]=a[x+1][y+1];
    temp[1][3]=a[x][y];temp[2][3]=a[x][y+1];temp[3][1]=a[x+2][y+2];temp[3][2]=a[x+1][y+2];temp[3][3]=a[x][y+2];
    a[x][y+2]=temp[1][3];a[x+1][y+2]=temp[2][3];a[x+2][y]=temp[3][1];a[x+2][y+1]=temp[3][2];a[x+2][y+2]=temp[3][3];
    a[x][y]=temp[1][1];a[x][y+1]=temp[1][2];a[x+1][y]=temp[2][1];a[x+1][y+1]=temp[2][2];
}
void turn2(int x,int y)
{
    int temp[10][10];
    temp[1][1]=a[x][y+2];temp[1][2]=a[x+1][y+2];temp[2][1]=a[x][y+1];temp[2][2]=a[x+1][y+1];
    temp[1][3]=a[x+2][y+2];temp[2][3]=a[x+2][y+1];temp[3][1]=a[x][y];temp[3][2]=a[x+1][y];temp[3][3]=a[x+2][y];
    a[x][y+2]=temp[1][3];a[x+1][y+2]=temp[2][3];a[x+2][y]=temp[3][1];a[x+2][y+1]=temp[3][2];a[x+2][y+2]=temp[3][3];
    a[x][y]=temp[1][1];a[x][y+1]=temp[1][2];a[x+1][y]=temp[2][1];a[x+1][y+1]=temp[2][2];
}
void turn3(int x,int y)
{
    int temp[10][10];
    temp[1][1]=a[x+1][y];temp[1][2]=a[x][y];temp[2][1]=a[x+1][y+1];temp[2][2]=a[x][y+1];
    a[x][y]=temp[1][1];a[x][y+1]=temp[1][2];a[x+1][y]=temp[2][1];a[x+1][y+1]=temp[2][2];
}
void turn4(int x,int y)
{
    int temp[10][10];
    temp[1][1]=a[x][y+1];temp[1][2]=a[x+1][y+1];temp[2][1]=a[x][y];temp[2][2]=a[x+1][y];
    a[x][y]=temp[1][1];a[x][y+1]=temp[1][2];a[x+1][y]=temp[2][1];a[x+1][y+1]=temp[2][2];
}
int main()
{
    while(scanf("%d %d %d %d %d",&a[0][0],&a[0][1],&a[0][2],&a[0][3],&a[0][4])!=EOF)
    {
        int num=1, m,n,x,y;
        while(num!=5)
        {
            scanf("%d %d %d %d %d",&a[num][0],&a[num][1],&a[num][2],&a[num][3],&a[num][4]);
            num++;
        }
        scanf("%d %d %d %d",&m,&n,&x,&y);
        if(n==3&&m==1)
        {
            turn1(x-1,y-1);
        }
        else if(n==3&&m==2)
        {
            turn2(x-1,y-1);
        }
        else if(n==2&&m==1)
        {
            turn3(x-1,y-1);
        }
        else if(n==2&&m==2)
        {
            turn4(x-1,y-1);
        }
        for(int i=0; i<5; i++)
        {
            for(int j=0; j<5; j++)
            {
                cout<<a[i][j];
                if(j<4)
                    cout<<" ";
            }
            cout<<endl;
        }
    }
    return 0;    
}

 

以上是关于BUPT复试专题—C翻转的主要内容,如果未能解决你的问题,请参考以下文章

BUPT复试专题—排序(2009)

BUPT复试专题—打牌

BUPT复试专题—List

BUPT复试专题—分数加法

BUPT复试专题—树查找

BUPT复试专题—找K小数