本次森岗杯的G题
我打了一个多小时,终于ac了;
吐了
题目描述
桌上有一张卡片,卡片是一个N * N的网格,每个网格正反两面都包含一个整数。开始卡片被正面朝上放在桌上,请你判断在执行
下列若干次操作之后卡片中网格的数字分布:
操作1:1 x y val 表示将第x行,第y列数字修改为val,只修改当前正面朝上的元素。(1 <= x, y <= n)
操作2:2 x y 将卡片第x行和第y行交换。(x, i) <–> (y, i)其中(1 <= i <= n)。(1 <= x, y <= n)
操作3:3 x y 将卡片第x列和第x列交换。(i, x) <–> (i, y)其中(1 <= i <= n)。(1 <= x, y <= n)
操作4:4 将卡片翻转,正面变反面,反面就会变成正面。
操作5:5 将卡片顺时针旋转90度。
操作6:6 将卡片顺时针旋转180度。
操作7:7 将卡片顺时针旋转270度。
注意:每个网格正反两面都是一个整体,在交换,旋转过程中其背面元素是跟着正面元素改变位置的。
输入描述:
输入第一行包含两个整数n, m。表示卡片网格大小和操作次数。
然后跟n行,每行n个整数,表示卡片的正面n * n网格
然后跟n行,每行n个整数,表示卡片的反面n * n网格。
然后跟m行,每行一个操作指令。
输出描述:
在m个操作指令执行之后,输出答案。
输出前n行,每行n个整数,表示卡片的正面。
然后再输出n行,每行n个整数,表示卡片的反面。
示例1
输入
复制
3 7
1 2 3
4 5 6
7 8 9
7 8 9
4 5 6
1 2 3
1 1 3 0
2 1 3
3 2 3
4
5
6
7
输出
复制
8 9 7
5 6 4
2 3 1
2 0 1
5 6 4
8 9 7
说明
正面 反面
1 2 3 7 8 9
4 5 6 4 5 6
7 8 9 1 2 3
在执行1 1 3 0之后:
正面 反面
1 2 0 7 8 9
4 5 6 4 5 6
7 8 9 1 2 3
在执行2 1 3之后:
7 8 9 1 2 3
4 5 6 4 5 6
1 2 0 7 8 9
在执行3 2 3之后:
7 9 8 1 3 2
4 6 5 4 6 5
1 0 2 7 9 8
在执行4之后:
1 3 2 7 9 8
4 6 5 4 6 5
7 9 8 1 0 2
在执行5之后:
7 4 1 1 4 7
9 6 3 0 6 9
8 5 2 2 5 8
在执行6之后:
2 5 8 8 5 2
3 6 9 9 6 0
1 4 7 7 4 1
在执行7之后:
8 9 7 2 0 1
5 6 4 5 6 4
2 3 1 8 9 7
备注:
1 <= n, m, val <= 100
代码如下
#include<iostream> #include<algorithm> using namespace std; const int N=105;
int n,m; int a[N][N];//正面 int b[N][N];//反面 //方案一 void fan_1(int x,int y,int val)
{ a[x][y]=val; } //方案二 void fan_2(int x,int y){ int c[N];int d[N]; for(int i=0;i
<n;i++) c[i]=a[x][i],d[i]=b[x][i]; for(int i=0;i<n;i++) a[x][i]=a[y][i],b[x][i]=
b[y][i]; for(int i=0;i<n;i++) a[y][i]=c[i],b[y][i]=d[i]; } //方案三 void fan_3(int
x,int y){ int c[N];int d[N]; for(int i=0;i<n;i++) c[i]=a[i][x],d[i]=b[i][x]; for
(int i=0;i<n;i++) a[i][x]=a[i][y],b[i][x]=b[i][y]; for(int i=0;i<n;i++) a[i][y]=
c[i],b[i][y]=d[i]; } void fan_4(){ int c[N][N]; for(int i=0;i<n;i++) for(int j=0
;j<n;j++) c[i][j]=a[i][j]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) a[i][j]=b[i
][j]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) b[i][j]=c[i][j]; } //方案五 void
fan_5(){ int c[N][N];int d[N][N]; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ c[i
][j]=a[n-j-1][i]; d[i][j]=b[n-j-1][i]; } for(int i=0;i<n;i++) for(int j=0;j<n;j
++){ a[i][j]=c[i][j]; b[i][j]=d[i][j]; } } //方案六 void fan_6(){ int c[N][N];int d
[N][N]; for(int i=0;i<n;i++) for(int j=0;j<n;j++){ c[i][j]=a[n-i-1][n-j-1]; d[i]
[j]=b[n-i-1][n-j-1]; } for(int i=0;i<n;i++) for(int j=0;j<n;j++){ a[i][j]=c[i][j
]; b[i][j]=d[i][j]; } } //方案七 void fan_7(){ int c[N][N];int d[N][N]; for(int i=0
;i<n;i++) for(int j=0;j<n;j++){ c[i][j]=a[j][n-i-1]; d[i][j]=b[j][n-i-1]; } for(
int i=0;i<n;i++) for(int j=0;j<n;j++){ a[i][j]=c[i][j]; b[i][j]=d[i][j]; } } int
main(){ cin>>n>>m; //输入正反数 for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j
]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>b[i][j]; //执行操作 for(int i=0;i<
m;i++){ int f_a; cin>>f_a;//执行方案输入 //到底是用swith还是级联,我选择swith; int x,y,val; switch
(f_a){ case 1: cin>>x>>y>>val;fan_1(x-1,y-1,val);break; case 2: cin>>x>>y;fan_2(
x-1,y-1);break; case 3: cin>>x>>y;fan_3(x-1,y-1);break; case 4: fan_4();break;
case 5: fan_5();break; case 6: fan_6();break; case 7: fan_7();break; } } //输出正面
for(int i=0;i<n;i++) for(int j=0;j<n;j++) cout<<a[i][j]<<(j!=n-1?" ":"\n");
//输出反面 for(int i=0;i<n;i++) for(int j=0;j<n;j++) cout<<b[i][j]<<(j!=n-1?" ":"\n"
); return 0; }
一个萌新的无奈,只会用这种笨办法0.0
还不是会长非要叫我打
我才懒得打

技术
©2019-2020 Toolsou All rights reserved,
Element-Ui组件 Message 消息提示, alert 弹窗Java:案例理解-接口回调element-ui踩坑记录【Golang 基础系列十】Go 语言 条件语句之if使用css样式设计一个简单的html登陆界面2020顺丰前端暑期实习面经(已过)无孔化就是手机的未来?还有很多问题需要解决【C#】实现学生成绩信息管理系统云原生应用如何做到低成本获得高稳定?用HTML+CSS做一个漂亮简单的个人网页