小火龙有一个 n×m 的矩阵,他对矩阵进行了一系列变换操作,矩阵变换操作可以分为以下两类:
1. 将矩阵的第x 行所有元素循环左移一位,最左边的元素则移到最右边的位置;
2. 将矩阵的第y 列所有元素循环上移一位,最上面的元素则移到最下面的位置。
现在已知小火龙进行 t 次变换操作后的矩阵和每次执行的操作,请你帮助小火龙找回原矩阵。
#include <bits/stdc++.h>
using namespace std;
int n,m,a[101][101],t,zl[2][150];
int main(){
cin>>n>>m>>t;
for(int i=1;i<=t;++i){
cin>>zl[0][i]>>zl[1][i];
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>a[i][j];
}
}
for(int i=t;i>=1;i--){
if(zl[0][i]==1){//将第zl[1][i]行向右移
for(int k=1;k<=2;++k){
int cmp=a[zl[1][i]][1];
for(int j=1;j<m;++j){
a[zl[1][i]][j]=a[zl[1][i]][j+1];
}
a[zl[1][i]][m]=cmp;
}
}
else{//将第zl[1][i]行向下移
for(int k=1;k<=2;++k){
int cmp=a[1][zl[1][i]];
for(int j=1;j<n;++j){
a[j][zl[1][i]]=a[j+1][zl[1][i]];
}
a[n][zl[1][i]]=cmp;
}
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cout<<a[i][j]<<" ";
}
puts("");
}
return 0;
}
10pts