3417 - Gen Mat 28

From Bitnami MediaWiki
Revision as of 14:23, 14 December 2023 by Raul (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

Scrieți un program care citește de la tastatură un număr natural n și construiește o matrice cu n linii și n coloane ale cărei elemente vor primi valori dupa cum urmează:

  • În colțul din stânga sus, de coorodnate 1 1, va fi 1.
  • În pozițiile adiacente, de coordonate 1 2 și 2 1, va fi n.
  • În pozițiile adiacente, de coordonate 1 3, 2 2 și 3 1, va fi 2.
  • În pozițiile adiacente, de coordonate 1 4, 2 3, 3 2 și 4 1, va fi n-1.
  • Și așa mai departe…
  • În penultimele poziții, de coordonate n-1 n și n n-1, va fi n.
  • În ultima poziție, de coordonate n n, va fi 1.

Date de intrare[edit | edit source]

Programul citește de la tastatură numarul n.

Date de ieșire[edit | edit source]

Programul afișează pe ecran matricea construită, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.

Restricții și precizări[edit | edit source]

  • 3 ≤ n ≤ 30

Exemplu[edit | edit source]

Intrare

5

Ieșire

1 5 2 4 3
5 2 4 3 4
2 4 3 4 2
4 3 4 2 5
3 4 2 5 1

Explicație[edit | edit source]

S-a citit 5 și se afisează o matrice de 5 linii și 5 coloane, unde 1 se află in colțul din stânga sus, apoi în pozițiile învecinate se află 5, apoi 2 și tot așa până se va completa matricea.

Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1"> ​n = int(input())

v = [0] * 61

lc = 0

st = 1

dr = n

for i in range(1, 2*n+1):

   if i % 2 == 1:
       if v[i-1] != st:
           lc += 1
           v[lc] = st
           st += 1
       else:
           st += 1
   else:
       if v[i-1] != dr:
           lc += 1
           v[lc] = dr
           dr -= 1
       else:
           dr -= 1

for i in range(1, n+1):

   for j in range(1, n+1):
       print(v[i+j-1], end=" ")
   print()

</syntaxhighlight>