Programming-Basics-Book-CSharp-BG

Генериране на числова спирала

Трябва да измислим зависимост между числата в числовата спирала, за да можем лесно да генерираме всяко следващо число, без да се налага да разглеждаме матрици и тяхното обхождане. Ако разгледаме внимателно картинката от условието, можем да забележим, че на всеки 2 “завоя” в спиралата числата, които прескачаме, се увеличават с 1, т.е. от 5 до 7 и от 7 до 9 не се прескача нито 1 число, а директно събираме със стъпката на редицата. От 9 до 13 и от 13 до 17 прескачаме едно число, т.е. събираме два пъти стъпката. От 17 до 23 и от 23 до 29 прескачаме две числа, т.е. събираме три пъти стъпката и т.н.

Така виждаме, че при първите две имаме последното числото + 1 * стъпката, при следващите две събираме с 2 * стъпката и т.н. Всеки път, когато искаме да стигнем до следващото число от спиралата, ще трябва да извършваме такива изчисления.

Това, за което трябва да се погрижим, е на всеки две числа нашият множител (нека го наречем “коефициент”) да се увеличава с 1 (spiralStepMul++), което може да се постигне с проста проверка (spiralCount % 2 == 0). Целият код от генерирането на спиралата в масив е даден по-долу.