题意:
n*m的矩阵,进行三种操作,第一种把某一行整体左移,第二种某一列上移,第三种把变化前的一个点改变数据
思路:
错误及反思:
代码:
#include<bits/stdc++.h>
using namespace std;
pair<int,int> now[110][110];
int ans[110][110];
int main()
{
for(int i=0;i<110;i++)
for(int j=0;j<110;j++)
now[i][j]={i,j};
memset(ans,0,sizeof(ans));
int n,m,q;
scanf("%d%d%d",&n,&m,&q);
for(int i=0;i<q;i++)
{
int cho;
scanf("%d",&cho);
if(cho==1)
{
int temp;
scanf("%d",&temp);
temp--;
pair<int,int> t=now[temp][0];
for(int i=0;i<m-1;i++)
now[temp][i]=now[temp][i+1];
now[temp][m-1]=t;
}
else if(cho==2)
{
int temp;
scanf("%d",&temp);
temp--;
pair<int,int> t=now[0][temp];
for(int i=0;i<n-1;i++)
now[i][temp]=now[i+1][temp];
now[n-1][temp]=t;
}
else
{
int x,y,val;
scanf("%d%d%d",&x,&y,&val);
ans[now[x-1][y-1].first][now[x-1][y-1].second]=val;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++){
if(j) printf(" %d",ans[i][j]);
else
printf("%d",ans[i][j]);
}
puts("");
}
}