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

 

先把要翻转的部分提出来反转后复制到数组b,然后再复制到数组a的相应位置

由于我比较笨,只能暴力解决。

 
#include <bits/stdc++.h>  
using namespace std;  
int main()  
{  
    int a[6][6];  
    int b[4][4];  
    memset(a,0,sizeof(a));  
    memset(b,0,sizeof(b));  
    int x;  
    for(int i = 1;i < 6;i++)  
    {  
        for(int j = 1;j < 6;j++)  
        {  
            scanf("%d",&x);  
            a[i][j] = x;  
        }  
    }  
    int p,q,m,n;  
    scanf("%d%d%d%d",&p,&q,&m,&n);  
    if(p == 1)//顺时针翻转  
    {  
            int e = 1,f = 1;  
            for(int i = n,e = 1;i < n + q;i++,e++)//把要翻转的部分翻转后,复制到数组b  
            {  
                for(int j = m + q - 1,f = 1;j >= m;j--,f++)  
                {  
                    b[e][f] = a[j][i];  
                }  
            }  
            for(int i = m,e = 1;i < m + q;i++,e++)//将数组b上的内容对应复制到数组a上  
[html] view plain copy
        {  
            for(int j = n,f = 1;j < n + q;j++,f++)  
            {  
                a[i][j] = b[e][f];  
            }  
        }  
}  
else if(p == 2)//逆时针翻转  
{  
        int e = 1,f = 1;  
        for(int i = n + q - 1,e = 1;i >= n;i--,e++)  
        {  
            for(int j = m,f = 1;j < m + q;j++,f++)  
            {  
                b[e][f] = a[j][i];  
            }  
        }  
        for(int i = m,e = 1;i < m + q;i++,e++)  
        {  
            for(int j = n,f = 1;j < n + q;j++,f++)  
            {  
                a[i][j] = b[e][f];  
            }  
        }  
}  
for(int i = 1;i < 6;i++)  
{  
    for(int j = 1;j < 6;j++)  
    {  
        if(j != 5)  
            printf("%d ",a[i][j]);  
        else  
            printf("%d\n",a[i][j]);  
    }  
}  

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值