Numerele pascu Turbo într-o spirală

Având în vedere un număr întreg pozitiv n. Este necesar să se aranjeze numerele de la 1 la n 2 într-o matrice pătrat de pe spirala:

Numărătoarea inversă începe de la colțul din stânga sus, apoi se muta spre „est-sud-vest de Nord“, etc.

Programul următor conține două proceduri: o serie de proceduri de ieșire și procedura de umplere într-o matrice de spirală. Matricea Procedura de umplere se realizează mai întâi mișcarea din celula cu indicii [1,1] în direcția „est-vest“ în celula [1, n], atunci celula [2, n] în direcția „nord-sud“ la celula [n , n], apoi în direcția "est-vest" a celulei [n, n-1] la celula [n, 1], și în final, celula [n-1,1] la celulele [2,1]. Apoi totul se repetă, dar cu zone de dimensiuni mai mici.

Luați în considerare un alt algoritm pentru rezolvarea acestei probleme.

În primul rând, vom începe numărarea înapoi de la n 2 la 1, apoi abordarea până în ultima zi a matricei va fi efectuată în „sud - vest - nord -vostok“.

De exemplu, pentru n impar, să zicem n = 5 pentru

În acest din urmă ocupă un număr de poziție i: = n div 2; j: = n div 2 + 1.

Se transferă originea în poziția de ultima zi. Notăm punctul de start coordonatele xx = 0; yy = 0. Apoi, pentru n impar avem xx: = n div 2 + 1-j; yy: = n div 2 + 1-i, chiar n xx: = n div 2 + 1-j; yy: = n div 2-i. În acest caz, direcția pozitivă a axa x este ales în direcția „est-vest.“

Astfel, în cazul în care n = 5, atunci x [2,1] = 16 au xx = 2 + 1-1 = 2, yy = 2 + 1-2 = 1. Pentru n = 4, x [2,1]: = 6, au xx: = 2 + 1-1 = 2, yy = 2-2 = 0. Apoi, ia în considerare o funcție spirală a două variabile S = F (xx, yy), care asociază perechii ordonate de întregi xx, yy unele întreg S [1]. Schematic, funcția spiral este prezentată în Figura 2.

De exemplu, pentru o xx pereche comandat = -1; yy = 1 S = F (-1,1) = 6. Funcția S = F (xx, yy) poate fi reprezentat prin formula:

k = max (| xx |, | yy |) - valoarea maximă a celor două;

p = 1 dacă xx> yy, p = -1 altfel.

Evident, la matrice cu un număr n de 2 la 1, este necesar să se introducă o corecție, te S: = n 2 -S. În cele din urmă, chiar și matricea n trebuie rotită cu 180 ° în sens antiorar pentru numărătoarea inversă respectă termenii problemei, și anume, Am fost în direcția „est-sud-vest-nord.“