Untitled

mail@pastecode.io avatar
unknown
c_cpp
3 years ago
1.2 kB
4
Indexable
Never
#include <iostream>
#include <cmath>

using namespace std;

void beOlvas(int& n)
{
	cin >> n;
}

void kiIrMatrix(int n, const int* matrix)
{
	for (int i = 0; i < n * n; ++i)
	{
		cout << matrix[i] << ' ';

		if ((i + 1) % n == 0)
			cout << '\n';
	}
}

void spiralSorrend(const int* a, int n, int* b)
{
	int N = sqrt(n * n);

	//spiral tomb indexe
	int l = 0;

	//matrix tomb indexe
	int ind = 0;

	for (int i = N; i > 0;)
	{
		for (int j = 1; j < i; ++j)
			b[l++] = a[ind++];
		
		for (int j = 1; j < i; ++j)
			b[l++] = a[ind], ind += sqrt(n * n);

		for (int j = 1; j < i; ++j)
			b[l++] = a[ind--];

		for (int j = 1; j < i; ++j)
			b[l++] = a[ind], ind -= sqrt(n * n);


		if (i == 1)
			b[l] = a[ind];

		ind += sqrt(n * n) + 1;
		i -= 2;
	}
}

void kiIrSpiral(int n, int* a)
{
	for (int i = 0; i < n * n; ++i)
		cout << a[i] << ' ';
}

int main()
{
	int n;

	beOlvas(n);

	const int* matrix  = new int[n * n]{ 1, 2, 3, 4, 5, 6, 7, 8, 9};
	int* spiral = new int[n * n];

	kiIrMatrix(n, matrix);

	spiralSorrend(matrix, n, spiral);

	kiIrSpiral(n, spiral);

	delete[] matrix;
	delete[] spiral;

	return 0;
}