这是矩阵旋转问题,我就是改了下循环将行转换为了列,列转换为了行。
其他的话就是注意读题就行了
具体解释看代码就行了
#include<iostream>
using namespace std;
int main()
{
int n,m,a[505][505];
int k=1;
cin>>n>>m;
//初始化数组a[][];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
a[i][j]=k;
k++;
}
int x,y,r,z;//输入执行方式;
int b[505][505]={0};//定义一个数组存储将要进行旋转的奇矩阵
for(int i=1;i<=m;i++)
{
cin>>x>>y>>r>>z;
for(int j=x-r;j<=x+r;j++)//将要进行旋转的奇矩阵存储到数组b[][]对应的位置上
for(int j1=y-r;j1<=y+r;j1++)
{
b[j][j1]=a[j][j1];
}
//进行顺时针旋转
if(z==0)
for(int h1=x-r,l2=y-r;h1<=x+r;h1++,l2++)//h1代表数组a[][]的行下标,h2代表数组b[][]的列下标
for(int l1=y-r,h2=x+r;l1<=y+r;l1++,h2--)// l1代表数组a[][]的列下标,h2代表数组b[][]的行下标
a[h1][l1]=b[h2][l2];
else//逆时针旋转
for(int h1=x-r,l2=y+r;h1<=x+r;h1++,l2--)//h1代表数组a[][]的行下标,h2代表数组b[][]的列下标
for(int l1=y-r,h2=x-r;l1<=y+r;l1++,h2++)// l1代表数组a[][]的列下标,h2代表数组b[][]的行下标
a[h1][l1]=b[h2][l2];
}
//输出结果
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}