Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- //Write a program that reads a positive integer number N (N < 20) from console and outputs in the console the numbers
- //1 ... N numbers arranged as a spiral.
- //Example for N = 4
- // 1 2 3 4
- // 12 13 14 5
- // 11 16 15 6
- // 10 9 8 7
- class Program
- {
- private static int data = 1;
- static void Main()
- {
- int col, row, size;
- size = int.Parse(Console.ReadLine());
- CheckInput(size);
- col = row = size;
- int[,] matrix = new int[col, row];
- SetMatrixToZero(matrix, col, row);
- while (true)
- {
- matrix = Right(matrix, col, row);
- matrix = Down(matrix, col, row);
- matrix = Left(matrix, col, row);
- matrix = Up(matrix, col, row);
- }
- }
- private static int[,] Up(int[,] matrix, int col, int row)
- {
- for (int x = 0; x < col; x++)
- {
- for (int y = 0; y < row; y++)
- {
- if (matrix[x, y] == 0 && matrix[x, y + 1] > 0 && x == 0) //first
- {
- matrix[x, y] = data;
- CheckData(matrix, col, row);
- data++;
- for (int i = y - 1; i >= 0; i--)
- {
- if (matrix[x, i] == 0)
- {
- matrix[x, i] = data;
- CheckData(matrix, col, row);
- data++;
- }
- if (i == 0)
- {
- return matrix;
- }
- if (matrix[x, i - 1] > 0)
- {
- return matrix;
- }
- }
- }
- if (matrix[x, y] == 0 && matrix[x, y + 1] > 0 && matrix[x - 1, y] > 0) //second
- {
- matrix[x, y] = data;
- CheckData(matrix, col, row);
- data++;
- for (int i = y - 1; i >= 0; i--)
- {
- if (matrix[x, i] > 0)
- {
- return matrix;
- }
- matrix[x, i] = data;
- CheckData(matrix, col, row);
- data++;
- if (matrix[x, i - 1] > 0)
- {
- return matrix;
- }
- }
- }
- }
- }
- return matrix;
- }
- private static int[,] Left(int[,] matrix, int col, int row)
- {
- for (int x = 0; x < col; x++)
- {
- for (int y = 0; y < row; y++)
- {
- if (matrix[x, y] == 0 && y == row - 1 && matrix[x + 1, y] > 0) //first
- {
- matrix[x, y] = data;
- data++;
- for (int i = x - 1; i >= 0; i--)
- {
- if (matrix[i, y] == 0)
- {
- matrix[i, y] = data;
- data++;
- }
- if (i == 0)
- {
- return matrix;
- }
- }
- }
- if (matrix[x, y] == 0 && matrix[x + 1, y] > 0 && matrix[x, y + 1] > 0) // second
- {
- matrix[x, y] = data;
- CheckData(matrix, col, row);
- data++;
- for (int i = x - 1; i >= 0; i--)
- {
- if (matrix[i, y] > 0)
- {
- return matrix;
- }
- matrix[i, y] = data;
- CheckData(matrix, col, row);
- data++;
- if (matrix[i - 1, y] > 0)
- {
- return matrix;
- }
- }
- }
- }
- }
- return matrix;
- }
- private static int[,] Down(int[,] matrix, int col, int row)
- {
- for (int x = 0; x < col; x++)
- {
- for (int y = 0; y < row; y++)
- {
- if (matrix[x, y] == 0 && x == col - 1) //first
- {
- matrix[x, y] = data;
- CheckData(matrix, col, row);
- data++;
- for (int i = y + 1; i < row; i++)
- {
- if (matrix[x, i] > 0)
- {
- return matrix;
- }
- matrix[x, i] = data;
- CheckData(matrix, col, row);
- data++;
- if (i == row - 1)
- {
- return matrix;
- }
- }
- }
- if (matrix[x, y] == 0 && matrix[x + 1, y] > 0 && matrix[x, y - 1] > 0)
- {
- matrix[x, y] = data;
- data++;
- for (int i = y + 1; i < row; i++)
- {
- if (matrix[x, i] > 0)
- {
- return matrix;
- }
- matrix[x, i] = data;
- data++;
- if (i == row)
- {
- return matrix;
- }
- }
- }
- }
- }
- return matrix;
- }
- private static void PrintMatrix(int[,] matrix, int col, int row)
- {
- Console.Clear();
- for (int x = 0; x < col; x++)
- {
- for (int y = 0; y < row; y++)
- {
- Console.SetCursorPosition(x * 3, y);
- Console.Write(matrix[x, y]);
- }
- }
- }
- private static void SetMatrixToZero(int[,] matrix, int col, int row)
- {
- for (int x = 0; x < col; x++)
- {
- for (int y = 0; y < row; y++)
- {
- matrix[x, y] = 0;
- }
- }
- }
- private static int[,] Right(int[,] matrix, int col, int row)
- {
- for (int x = 0; x < col; x++)
- {
- for (int y = 0; y < row; y++)
- {
- if (matrix[x, y] == 0 && data == 1) //first time
- {
- matrix[x, y] = data;
- data++;
- for (int i = y + 1; i < col; i++)
- {
- matrix[i, y] = data;
- data++;
- if (i < col - 1)
- {
- if (matrix[i + 1, y] > 0)
- {
- return matrix;
- }
- }
- if (i + 1 == col)
- {
- return matrix;
- }
- }
- }
- if (matrix[x, y] == 0 && matrix[x - 1, y] > 0 && matrix[x, y - 1] > 0) //second time
- {
- matrix[x, y] = data;
- CheckData(matrix, col, row);
- data++;
- for (int i = x + 1; x < col; i++)
- {
- if (matrix[i, y] > 0)
- {
- return matrix;
- }
- matrix[i, y] = data;
- CheckData(matrix, col, row);
- data++;
- if (matrix[i + 1, y] > 0)
- {
- return matrix;
- }
- }
- }
- }
- }
- return matrix;
- }
- private static void CheckData(int[,] matrix, int col, int row)
- {
- if (data == col * col)
- {
- PrintMatrix(matrix, col, row);
- Environment.Exit(0);
- }
- }
- private static void CheckInput(int size)
- {
- if (size < 0 || size > 19)
- {
- Console.WriteLine("Wrong data!");
- Environment.Exit(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement