2543 - Pattern 2
Cerința[edit | edit source]
Se dă un număr natural n. Se construiește o matrice pătratică de dimensiune 2^n-1, după următoarele reguli:
-elementul din mijlocul matricii este egal cu n -elementele de pe linia mediană și cele de pe coloana mediană (exceptând elementul din mijlocul matricii) sunt nule -folosind linia mediană și coloana mediană, se împarte matricea în alte 4 matrici care se generează similar, dar au dimensiunea 2^(n-1)-1. Calculați și afișați suma elementelor din matricea construită conform regulilor de mai sus.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.", programul va afișa pe ecran suma elementelor din matrice. Dacă sunt mai multe soluții, trebuie afișată cea mai din stânga-sus poziție. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 15
Exemple[edit | edit source]
Exemplul 1[edit | edit source]
- ecran
- Introduceți un număr natural n: 3
- ecran
- Datele sunt introduse corect.
- Suma elementelor din matrice este 27
Exemplul 2[edit | edit source]
- ecran
- Introduceți un număr natural n: 2
- ecran
- Datele sunt introduse corect.
- Suma elementelor din matrice este 6
Exemplul 3[edit | edit source]
- ecran
- Introduceți un număr natural n: -1
- ecran
- Datele nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 2543
import sys
def validare_date(n):
if n < 1 or n > 15: print("Datele nu corespund restricțiilor impuse.") sys.exit(0)
def construieste_matrice(n, linie, coloana, dimensiune):
if dimensiune == 1: return n
subdimensiune = dimensiune // 2 matrice = [[0] * dimensiune for _ in range(dimensiune)]
mijloc = subdimensiune matrice[mijloc][mijloc] = n
coloana_stanga = coloana - subdimensiune coloana_dreapta = coloana + subdimensiune linie_sus = linie - subdimensiune linie_jos = linie + subdimensiune
matrice_mijloc_sus = construieste_matrice(n - 1, linie_sus, coloana, subdimensiune) matrice_mijloc_jos = construieste_matrice(n - 1, linie_jos, coloana, subdimensiune) matrice_mijloc_stanga = construieste_matrice(n - 1, linie, coloana_stanga, subdimensiune) matrice_mijloc_dreapta = construieste_matrice(n - 1, linie, coloana_dreapta, subdimensiune)
for i in range(dimensiune): for j in range(dimensiune): if i == mijloc or j == mijloc: continue if i < mijloc: if j < mijloc: matrice[i][j] = matrice_mijloc_sus[i][j] else: matrice[i][j] = matrice_mijloc_dreapta[i][j - mijloc - 1] else: if j < mijloc: matrice[i][j] = matrice_mijloc_stanga[i - mijloc - 1][j] else: matrice[i][j] = matrice_mijloc_jos[i - mijloc - 1][j - mijloc - 1]
return matrice
def calculeaza_suma_elementelor(matrice):
suma = 0 for i in range(len(matrice)): for j in range(len(matrice)): suma += matrice[i][j] return suma
n = int(input("Introduceți un număr natural n: ")) validare_date(n)
linie = coloana = dimensiune = 2**n - 1 matrice = construieste_matrice(n, linie // 2, coloana // 2, dimensiune) suma = calculeaza_suma_elementelor(matrice)
print("Datele sunt introduse corect.") print(f"Suma elementelor din matrice este {suma}.")
</syntaxhighlight>
Explicatie[edit | edit source]
Programul primește de la tastatură un număr natural n și construiește o matrice pătratică de dimensiune 2^n-1 conform regulilor din enunț. Apoi, se calculează suma elementelor din matrice și se afișează pe ecran.
Funcția validare_date(n) primește numărul n și verifică dacă acesta respectă restricțiile impuse (1 ≤ n ≤ 15). Dacă numărul nu respectă aceste restricții, se afișează un mesaj corespunzător și programul se oprește prin apelul funcției sys.exit(0).
Funcția construieste_matrice(n, linie, coloana, dimensiune) primește parametrii necesari pentru a construi matricea conform regulilor din enunț și returnează matricea construită. Funcția utilizează o tehnică de recursivitate pentru a construi matricea, prin împărțirea acesteia în patru submatrici similare de dimensiune 2^(n-1)-1.
Funcția calculeaza_suma_elementelor(matrice) primește o matrice ca parametru și calculează suma elementelor acesteia.
În programul principal se citește numărul n de la tastatură, se validează datele și se construiește matricea conform regulilor din enunț. Apoi, se calculează suma elementelor din matrice și se afișează pe ecran un mesaj corespunzător.