0210 - Chenar
Enunț[edit | edit source]
Se consideră tabloul bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult patru cifre fiecare.
Cerinţa[edit | edit source]
Scrieţi un program care citeşte numărul natural n şi cele n*n elemente ale tabloului şi apoi afişează elementele chenarului exterior al tabloului, separate prin câte un spaţiu. Chenarul este parcurs în sensul acelor de ceasornic începând din colţul său stânga-sus. Chenarul este format din prima şi ultima linie, prima şi ultima coloană a tabloului.
Date de intrare[edit | edit source]
Fişierul de intrare chenar.in conţine pe prima linie numărul n, iar pe următoarele n linii câte n numere naturale separate prin spaţii, reprezentând elementele tabloului
Date de ieşire[edit | edit source]
Dacă datele sunt introduse corect,în fişierul de ieşire chenar.out se va afișa :"Datele sunt introduse corect.",apoi pe un rând va conţine elementele cerute, separate prin câte un spaţiu.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".
Restricții și precizări[edit | edit source]
- 2 ⩽ n ⩽ 23
- elementele tabloului sunt mai mici decât 1000
Exemplu[edit | edit source]
- chenar.in
- 5
- 1 2 3 4 5
- 6 7 8 9 1
- 2 3 4 5 6
- 7 8 9 1 2
- 3 4 5 6 7
- chenar.out
- Datele sunt introduse corect.
- 1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Funție care verifică dacă datele de intrare sunt valide conform cerinței.
def validare(n: int, a: list[list[int]]) -> bool:
# Verifică dacă n este între 2 și 23, inclusiv if n < 2 or n > 23: return False # Verifică dacă fiecare element din matricea a este între 0 și 9999, inclusiv for i in range(n): for j in range(n): if a[i][j] < 0 or a[i][j] >= 10000: return False return True
- Funcție care returnează elementele chenarului exterior al tabloului, în sensul acelor
- de ceasornic începând din colțul stânga-sus.
def chenar(n: int, a: list[list[int]]) -> list[int]:
# Inițializăm lista rezultat cu elementele din prima linie a matricei a result = [] for j in range(n): result.append(a[0][j]) # Adăugăm elementele de pe ultima coloană a matricei a, cu excepția colțului din dreapta sus for i in range(1, n): result.append(a[i][n-1]) # Adăugăm elementele de pe ultima linie a matricei a, în ordine inversă for j in range(n-2, -1, -1): result.append(a[n-1][j]) # Adăugăm elementele de pe prima coloană a matricei a, cu excepția colțului din stânga sus, în ordine inversă for i in range(n-2, 0, -1): result.append(a[i][0]) # Returnăm lista cu elementele chenarului return result
- Programul principal
if __name__ == '__main__':
# Deschidem fișierele de intrare și de ieșire with open('chenar.in', 'r') as fin, open('chenar.out', 'w') as fout: # Citim dimensiunea matricei n = int(fin.readline().strip()) # Inițializăm matricea a cu datele citite din fișierul de intrare a = [] for i in range(n): row = list(map(int, fin.readline().strip().split())) a.append(row)
# Verificăm dacă datele de intrare sunt valide if validare(n, a): # Calculăm elementele chenarului și le scriem în fișierul de ieșire, separate prin spațiu result = chenar(n, a) fout.write("Datele sunt introduse corect.\n") fout.write(' '.join(map(str, result))) else: # Scriem mesajul de eroare în fișierul de ieșire fout.write('Datele nu corespund restricțiilor impuse.')
</syntaxhighlight>