题目描述
给你一个 n×n 的二维数组 a,然后依次对这个二维数组执行 q 次操作,每个操作都是以下七种旋操作中的一种:
- 把最上面一行平移到最下面。
- 把最下面一行平移到最上面。
- 把最左边一列平移到最右边。
- 把最右边一列平移到最左边。
- 顺时针旋转 90°。
- 顺时针旋转 180°。
- 顺时针旋转 270°。
每次操作结束后,你都要输出当前的每次操作结束后,你都要输出当前的a。
输入格式
第一行,两个正整数第一行,两个正整数n, q。
接下来接下来n行,每行行,每行n个正整数,表示二维数组个正整数,表示二维数组a。
接下来一行,接下来一行,q 个值为 1∼7的正整数,表示执行操作的编号。
输出格式
共共q个二维数组,表示每次操作后的个二维数组,表示每次操作后的a。。
每个二维数组都有每个二维数组都有n行,每行行,每行n个整数。个整数。
每两个相邻的二维数组之间都要一行空行分割。每两个相邻的二维数组之间都要一行空行分割。
样例 1
输入输入
3 7
1 2 3
4 5 6
7 8 9
1 2 3 4 5 6 7
Copy
输出输出
4 5 6
7 8 9
1 2 3
1 2 3
4 5 6
7 8 9
2 3 1
5 6 4
8 9 7
1 2 3
4 5 6
7 8 9
7 4 1
8 5 2
9 6 3
3 6 9
2 5 8
1 4 7
9 8 7
6 5 4
3 2 1
Copy
样例 2
输入输入
3 3
1 1 1
2 2 2
3 3 3
1 1 1
Copy
输出输出
2 2 2
3 3 3
1 1 1
3 3 3
1 1 1
2 2 2
1 1 1
2 2 2
3 3 3
代码
#include<bits/stdc++.h>
using namespace std;
int n,q,c,a[1005][1005];
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)cin>>a[i][j];
cout<<endl;
}
for(int i=1;i<=q;i++){
cin>>c;
if(c==1){
long long aj[1005];
for(int j=1;j<=n;j++)aj[j]=a[1][j];
for(int j=1;j<n;j++){
for(int k=1;k<=n;k++)a[j][k]=a[j+1][k];
}
for(int j=1;j<=n;j++)a[n][j]=aj[j];
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
else if(c==2){
long long aj[1005];
for(int j=1;j<=n;j++)aj[j]=a[n][j];
for(int j=n;j>=2;j--){
for(int k=1;k<=n;k++)a[j][k]=a[j-1][k];
}
for(int j=1;j<=n;j++)a[1][j]=aj[j];
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
else if(c==3){
long long aj[1005];
for(int j=1;j<=n;j++)aj[j]=a[j][1];
for(int j=1;j<n;j++){
for(int k=1;k<=n;k++)a[k][j]=a[k][j+1];
}
for(int j=1;j<=n;j++)a[j][n]=aj[j];
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
else if(c==4){
long long aj[1005];
for(int j=1;j<=n;j++)aj[j]=a[j][n];
for(int j=n;j>=2;j--){
for(int k=1;k<=n;k++)a[k][j]=a[k][j-1];
}
for(int j=1;j<=n;j++)a[j][1]=aj[j];
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
else if(c==5){
long long aj[1005][1005],ki=1,kj=1;
for(int j=1;j<=n;j++){
for(int k=n;k>=1;k--){
aj[ki][kj]=a[k][j];
kj++;
}
ki++;
kj=1;
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
else if(c==6){
long long aj[1005][1005],ki=1,kj=1;
for(int j=1;j<=n;j++){
for(int k=n;k>=1;k--){
aj[ki][kj]=a[k][j];
kj++;
}
ki++;
kj=1;
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
}
ki=1;
kj=1;
for(int j=1;j<=n;j++){
for(int k=n;k>=1;k--){
aj[ki][kj]=a[k][j];
kj++;
}
ki++;
kj=1;
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
else if(c==7){
long long aj[1005][1005],ki=1,kj=1;
for(int j=1;j<=n;j++){
for(int k=n;k>=1;k--){
aj[ki][kj]=a[k][j];
kj++;
}
ki++;
kj=1;
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
}
ki=1;
kj=1;
for(int j=1;j<=n;j++){
for(int k=n;k>=1;k--){
aj[ki][kj]=a[k][j];
kj++;
}
ki++;
kj=1;
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
}
ki=1;
kj=1;
for(int j=1;j<=n;j++){
for(int k=n;k>=1;k--){
aj[ki][kj]=a[k][j];
kj++;
}
ki++;
kj=1;
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
}
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
}
}