2543 - Pattern 2

From Bitnami MediaWiki

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">

  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.