Turbo Pascal номера в спирала

Положително число п. Необходимо е да се осигури числата от 1 до N 2 в квадратна решетка на спиралата:

Countdown започва от горния ляв ъгъл, след това преминете към "изток-югозапад от Севера" и т.н.

В следната програма съдържа две процедури: масив от изход процедура и процедурата на попълване на спирала масив. Масивът процедура пълнене се извършва първото движение от клетката с индекси [1,1] в посока на "изток-запад" на клетката [1, п], след това клетките [2, п] в посока "север-юг" в клетката [N , п], след това в посока на "изток-запад" на клетката [N, N-1] в клетката [N, 1], и накрая клетката [п-1,1] към клетките [2,1]. След това всичко се повтаря, но с по-малки области размер.

Помислете за друг алгоритъм за решаване на този проблем.

Първо ще започнем изброява от п 2: 1, а след това подходът към последния ден на матрицата, ще се проведе в "юг - запад - север -vostok".

Например, за нечетен п, казват п = 5 за

В последния заема номер на позиция I: п = DIV 2; J: = п DIV 2 + 1.

Трансфер на произхода на позицията на последния ден. Означаваме началната точка координира хх = 0; гг = 0. Тогава за нечетен п имаме хх: = п DIV 2 + 1-J; гг: = п DIV 2 + 1-и, дори п хх: = п DIV 2 + 1-J; гг: = п DIV 2-и. В този случай положителната посока на оста х е избран в ръководството на "изток-запад".

Така, ако п = 5, тогава х [2,1] = 16 има хх = 2 + 1-1 = 2, гг = 2 + 1-2 = 1. За п = 4, х [2,1]: = 6, имат хх: = 2 + 1-1 = 2, гг = 2-2 = 0. След това помисли спирала функция на две променливи S = ​​F (хх, гг), който свързва нареди двойката числа хх, гг някои число S [1]. Схематично, функцията спирала е показана на Фигура 2.

Например, за подредена двойка хх = 1; гг = 1 S = F (-1,1) = 6. функция S В = F (хх, гг) може да бъде представен с формулата:

к = Max (| хх |, | гг |) - максималната стойност от двете;

р = 1, ако хх> гг, р = -1 друго.

Очевидно е, че в масива с номер N 2 към 1 е необходимо да се въведе корекция, ТЕ S: = N 2 -S. И накрая, за още по-п матрица трябва да се завърти на 180 ° обратно на часовниковата стрелка, за да отброява се съобразят с условията на проблема, т.е. Бях в посока "изток-юг-запад-север."