自测样例可过,代码有点小乱
#include<bits/stdc++.h>
using namespace std;
int n,m,a[999][999],k=1,x,y,r,z;
int t[999][999];
void turn(int m[999][999])//顺时针
{
int stx=x-r,sty=y-r;
int edx=x+r,edy=y+r,ans;//范围内起始坐标与终止坐标
for(int i=stx; i<=edx; i++)
{
for(int j=sty; j<=edy; j++){
int cnt=i-stx+1;
ans=edx-cnt+1;
a[j][ans]=t[i][j];
}
}
}
void be()//旋转后数组覆盖原数组
{
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
t[i][j]=a[i][j];
}
}
}
void nturn(int m[999][999])//逆时针
{
for(int i=0; i<3; i++){
turn(a);
be();
}
}
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
a[i][j]=k++;
for(int i=1; i<=m; i++)
{
cin>>x>>y>>r>>z;
int t=x;
x=y;
y=t; //将x列y行 转为x行y列
be();
if(z==0)
turn(a);
else if(z==1)
nturn(a);
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++)
printf("%d ",a[i][j]);
cout<<endl;
}
return 0;
}