首先数据给的是第几行第几列。
你这里从0开始,传入时需要-1。
而且你这旋转好像有问题,你可以打印试下
by 编码落寞 @ 2021-11-16 16:08:59
@[编码落寞](/user/557751) 样例意思是从1为下标是吗,我去试试
by lin_ac @ 2021-11-16 16:50:30
AC代码 此帖终结
```c++
#include<iostream>
using namespace std;
int arr[510][510];
int tmp[510][510];
void raotate_c(int x,int y,int r){ //顺时针转
for(int i=x-r;i<=x+r;i++){
for(int j=y-r;j<=y+r;j++){
tmp[x-y+j][x+y-i]=arr[i][j];
}
}
for(int i=x-r;i<=x+r;i++){
for(int j=y-r;j<=y+r;j++){
arr[i][j]=tmp[i][j];
}
}
}
void raotate_r(int x,int y,int r){ //逆时针转
for(int i=x-r;i<=x+r;i++){
for(int j=y-r;j<=y+r;j++){
tmp[x+y-j][y-x+i]=arr[i][j];
}
}
for(int i=x-r;i<=x+r;i++){
for(int j=y-r;j<=y+r;j++){
arr[i][j]=tmp[i][j];
}
}
}
int main(){
int n,m,cnt=1;
cin>>n>>m;
for(int i=1;i<=n;i++){ //输入数组
for(int j=1;j<=n;j++){
arr[i][j]=cnt;
cnt++;
}
}
for(int i=1;i<=m;i++){ //开始旋转
int x,y,r,z;
cin>>x>>y>>r>>z;
if(z==0){
raotate_c(x,y,r);
}
else{
raotate_r(x,y,r);
}
}
for(int i=1;i<=n;i++){ //输出
for(int j=1;j<=n;j++){
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
```
by lin_ac @ 2021-11-16 18:54:08