Постройка спирали из чисел - C#
Формулировка задачи:
Помогите пожалуста написать програму на с# в которой пользователь задает любое целое число (оно есть концом масива) и програма строит спираль начиная с нуля или одиницы до етого числа саму частичку кода которая отвечяэт за ввод числа в масив я смог сделать а вот построить спираль не могу.
Вот пример кода для ввода числа в масив
Только на ето хватило моих знаний с#
Помогите!!! Зарание спасибо!!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Snake
{
class Program
{
static void Main(string[] args)
{
double a = double.Parse(Console.ReadLine());
for (int i = 1; i <= a; i = i + 1)
Console.WriteLine(i);
}
}
}Решение задачи: «Постройка спирали из чисел»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Snake
{
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("***Програма яка будує спiраль зададаного розмiру з даданим числом закiнчення***");
Console.WriteLine("Виберiть в яку сторону буде будуватися спiраль (1 - поч. зверху злiва вниз) (2 - поч. зверху злiва на право)");
Console.WriteLine(" __1__ __2__ ");
Console.WriteLine(" 1 8 7 1 2 3 ");
Console.WriteLine(" 2 9 6 8 9 4 ");
Console.WriteLine(" 3 4 5 7 6 5 ");
int type = int.Parse(Console.ReadLine()); //Вибираємо тип спіралі
if (type == 1)
{
Console.WriteLine("Ви вибрали спiраль данного типу");
Console.WriteLine(" __1__ ");
Console.WriteLine(" 1 8 7 ");
Console.WriteLine(" 2 9 6 ");
Console.WriteLine(" 3 4 5 ");
Console.WriteLine("Введiть розмiр спiралi в форматi вiд 1 до 18(вiд 1x1 до 18х18)");
int size = int.Parse(Console.ReadLine()); //Вводимо розмір спіралі NxM
Console.WriteLine("Буде побудована спiраль розмiром " + size + "x" + size);
Console.WriteLine("Введiть число яким закiнчиться спiраль (max значення {0})", size * size);
int finish = int.Parse(Console.ReadLine()); //Число яким закінчується спіраль
int start = 1; //Число яким починається спіраль
int[,] spiral_nums = new int[start, finish]; //Цикл чисел спіралі від початку до кінця
int[,] spiral_build = new int[size, size]; //Цикл який будує спіраль
int row = 0;
int col = 0;
int dx = 1;
int dy = 0;
int dirChanges = 0;
int visits = size;
for (int i = 0; i < spiral_nums.Length; i++) //Значення {і} означає з якого числа почнеться будуватись спіраль, перші цифри заміняються на нулі в кінці
{
spiral_build[col, row] = i + 1; /*З якого числа почнеться спіраль (якщо змінити {1} на інше число в умові matrix[col, row] = i + 1)
*Якщо поміняти місцями {col} і {row} в умові (matrix[col, row] = i + 1;)
*то зміниться напрям за яким будується спіраль (поч. зверху зліва вниз) або (поч. зверху зліва на право)*/
if (--visits == 0)
{
visits = size * (dirChanges % 2) + size * ((dirChanges + 1) % 2) - (dirChanges / 2 - 1) - 2;
int temp = dx;
dx = -dy;
dy = temp;
dirChanges++;
}
col += dx; row += dy; //Як буде будуватись спіраль (поч. зверху зліва вниз)
}
Console.WriteLine();
for (int i = 0; i < size; i++) //будує рядочки
{
for (int j = 0; j < size; j++) //будує стовпчики
{
Console.Write(" " + spiral_build[i, j] + " "); // спосіб подачі (робить пробіли між числами)
}
Console.WriteLine();
Console.WriteLine();
}
Console.ReadKey();
}
else if (type == 2)
{
Console.WriteLine("Ви вибрали спiраль данного типу");
Console.WriteLine(" __2__ ");
Console.WriteLine(" 1 2 3 ");
Console.WriteLine(" 8 9 4 ");
Console.WriteLine(" 7 6 5 ");
Console.WriteLine("***Програма яка будує спiраль зададаного розмiру з даданим числом закiнчення***");
Console.WriteLine("Введiть розмiр спiралi в форматi вiд 1 до 18(вiд 1x1 до 18х18)");
int size = int.Parse(Console.ReadLine()); //Вводимо розмір спіралі NxM
Console.WriteLine("Пpограма будує спiраль розмiром " + size + "x" + size);
Console.WriteLine("Введiть число яким закiнчиться спiраль (max значення {0})", size * size);
int finish = int.Parse(Console.ReadLine()); //Число яким закінчується спіраль
int start = 1; //Число яким починається спіраль
int[,] spiral_nums = new int[start, finish]; //Цикл чисел спіралі від початку до кінця
int[,] spiral_build = new int[size, size]; //Цикл який будує спіраль
int row = 0;
int col = 0;
int dx = 1;
int dy = 0;
int dirChanges = 0;
int visits = size;
for (int i = 0; i < spiral_nums.Length; i++) //Значення {і} означає з якого числа почнеться будуватись спіраль, перші цифри заміняються на нулі в кінці
{
spiral_build[col, row] = i + 1; /*З якого числа почнеться спіраль (якщо змінити {1} на інше число в умові matrix[col, row] = i + 1)
*Якщо поміняти місцями {col} і {row} в умові (matrix[col, row] = i + 1;)
*то зміниться напрям за яким будується спіраль (поч. зверху зліва вниз) або (поч. зверху зліва на право)*/
if (--visits == 0)
{
visits = size * (dirChanges % 2) + size * ((dirChanges + 1) % 2) - (dirChanges / 2 - 1) - 2;
int temp = dx;
dx = -dy;
dy = temp;
dirChanges++;
}
col += dy; row += dx; //Як буде будуватись спіраль (поч. зверху зліва на право)
}
Console.WriteLine();
for (int i = 0; i < size; i++) //будує рядочки
{
for (int j = 0; j < size; j++) //будує стовпчики
{
Console.Write(" " + spiral_build[i, j] + " "); // спосіб подачі (робить пробіли між числами)
}
Console.WriteLine();
Console.WriteLine();
}
Console.ReadKey();
}
else
{
Console.WriteLine("Введене некоректне число");
}
}
catch
{
Console.WriteLine("Помилка");
}
}
}
}