求助,只有最后一个点过
查看原帖
求助,只有最后一个点过
846244
xy1ophone楼主2023/8/18 12:00
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n, m;
int s[501][501];
int h[501][501];	//初始化数组,s是原本的数组,h是转向时临时储存数据的数组
void turn(int a,int b,int c,bool d) //abcd分别对应xyrz
{
	if (!d)	//顺时针转的情况
	{
		for (int i1 = b - c, j2 = c * 2 + 1; i1 <= b + c; i1++,j2--)
		{
			for (int j1 = a - c,i2=1; j1 <= a + c; j1++,i2++)
			{
				h[j2][i2] = s[j1][i1];
			}
		}
		for (int i1 = b - c, i2 = 1; i1 <= b + c; i1++, i2++)
		{
			for (int j1 = a - c, j2 = 1; j1 <= a + c; j1++, j2++)
			{
				s[j1][i1] = h[j2][i2];
			}
		}
	}
	else//逆时针转的情况
	{
		for (int i1 = b-c, j2 = 1; i1 <= b + c; i1++, j2++)
		{
			for (int j1 = a-c, i2 = 2*c+1; j1 <= a + c; j1++, i2--)
			{
				h[j2][i2] = s[j1][i1];
			}
		}
		for (int i1 = b - c, i2 = 1; i1 <= b + c; i1++, i2++)
		{
			for (int j1 = a - c, j2 = 1; j1 <= a + c; j1++, j2++)
			{
				s[j1][i1] = h[j2][i2];
			}
		}
	}
}
int main()
{
	int p = 0;
	cin >> n >> m;
	for (int i = 1; i <= n; i++)//读入数字
	{
		for (int j = 1; j <= n; j++)
		{
			p++;
			s[j][i] = p;
		}
	}
	while (m--)//旋转M次
	{
		int x, y, r;
		bool z;
		cin >> x >> y >> r >> z;
		turn(x,y,r,z);
	}
	for (int i = 1; i <= n; i++)//输出
	{
		for (int j = 1; j <= n; j++)
		{
			cout << s[j][i]<<" ";
		}
		cout << endl;
	}
	return 0;
}
2023/8/18 12:00
加载中...