当前位置: 代码迷 >> 综合 >> 【牛客】C翻转(C++)
  详细解决方案

【牛客】C翻转(C++)

热度:90   发布时间:2023-09-19 06:19:27.0

题目描述

首先输入一个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为左上角的那几个数据。

输出描述:

输出翻转后的数组。

设置一个一维数组,顺序保存需要反转的数字,然后再按照翻转规则重新放到二维数组中。

代码在本地编译器测试成功了,但是牛客网上依然只能打印出一行,无解。

#include <iostream>
#include <cstdio>using namespace std;int num[5][5];void revers(int op[],int x,int y)  //C翻转
{x--;y--;      //自减适应下标int dir,dis;   //解析指令if(op[0]==1) dir=1;else dir=0;if(op[1]==2) dis=2;else dis=3;int temp[25];   //临时数组int n=0;for(int i=x;i<x+dis;i++){for(int j=y;j<y+dis;j++)temp[n++]=num[i][j];}n=0;   //临时数组下标处理if(!dir)    //顺时针{for(int i=x+dis-1;i>=x;i--){for(int j=y;j<y+dis;j++)num[i][j]=temp[n++];}}else{for(int j=y+dis-1;j>=y;j--){for(int i=x;i<x+dis;i++)num[i][j]=temp[n++];}}return ;
}int main()
{int m,n;for(m=0;m<5;m++)for(n=0;n<5;n++)scanf("%d",&num[m][n]);int op[2];int x,y;scanf("%d%d%d%d",&op[0],&op[1],&x,&y);revers(op,x,y);for(m=0;m<5;m++){for(n=0;n<5;n++){printf("%d ",num[m][n]);}printf("\r\n");}return 0;
}

 

  相关解决方案