Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
0635 - Vecini 1
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Sursă: [https://www.pbinfo.ro/probleme/635/vecini1] == Cerinţa == Se dă o matrice cu '''n''' linii și '''m''' coloane și elemente numere naturale. Determinați pentru câte dintre elementele matricei toți vecinii au valori diferite între ele. == Date de intrare == Fișierul de intrare '''vecini1.in''' conține pe prima linie numerele '''n m'''; urmează '''n''' linii cu câte '''m''' numere naturale separate prin spații – elementele matricei. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.".Fișierul de ieșire '''vecini1.out''' va conține pe prima linie numărul '''C''', reprezentând valoarea cerută. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.". == Restricții și precizări == * '''1 ≤ n,m ≤ 100''' * elementele matricei vor fi mai mici decât '''1 000 000''' * considerăm că un element al matricei poate avea patru vecini: elementele situate pe aceeași linie și pe coloanele adiacente și elementele aflate pe aceeași coloană și liniile adiacente == Exemple == === Exemplu 1 === ; '''vecini1.in''' :4 5 : 6 6 4 6 6 : 2 2 6 4 6 : 1 1 7 3 6 : 6 3 6 5 6 ; '''vecini1.out''' : 9 ==== Explicatie ==== Cele '''9''' elemente sunt marcate mai jos: : '''6 6''' 4 6 6 : '''2''' 2 6 4 6 : '''1 1''' 7 '''3''' 6 : '''6''' 3 '''6''' 5 '''6''' ==Rezolvare== <syntaxhighlight lang="python" line="1"> def citire_matrice(): # Deschide fișierul de intrare și citește n, m și p with open("vecini1.in", "r") as fin: line = fin.readline().split() if len(line) != 2: print("Datele nu sunt conform restrictiilor impuse.") exit() n, m = map(int, line) if not (1 <= n <= 100 and 1 <= m <= 100): print("Datele nu sunt conform restrictiilor impuse.") exit() matrice = [] # Citește matricea din fișierul de intrare for i in range(n): row = list(map(int, fin.readline().split())) # Verifică dacă elementele matricei sunt conform cerințelor if not all(x <= 1000000 for x in row): print("Datele nu sunt conform restrictiilor impuse.") exit() matrice.append(row) return n, m, matrice def vecini1(n, m, matrice): a = [[0] * (m + 2) for i in range(n + 2)] cnt = 0 # Adăugarea de margini de numere mari în matrice for i in range(1, n + 1): for j in range(1, m + 1): a[i][j] = matrice[i-1][j-1] a[i][0] = 1000001 a[i][m + 1] = 1000002 for j in range(1, m + 1): a[0][j] = 1000003 a[n + 1][j] = 1000004 # Parcurgerea matricei pentru a verifica vecinii for i in range(1, n + 1): for j in range(1, m + 1): if a[i][j - 1] != a[i][j + 1] and a[i][j - 1] != a[i - 1][j] and a[i][j - 1] != a[i + 1][j] and a[i][j + 1] != a[i - 1][j] and a[i - 1][j] != a[i + 1][j] and a[i][j + 1] != a[i + 1][j]: cnt += 1 return cnt if _name_ == "_main_": n, m, matrice = citire_matrice() col_divizibile = vecini1(n, m, matrice) with open("vecini1.out", "w") as fout: fout.write(str(col_divizibile) + "\n") print("Numarul de elemente cu toti vecinii diferiti intre ei este:", col_divizibile) </syntaxhighlight> == Explicații == Acest cod este scris în limbajul de programare Python și conține două funcții: Funcția citire_matrice(): Deschide fișierul "vecini1.in" și citește din el două numere întregi, n și m. Verifică dacă valorile citite respectă restricțiile impuse (n și m trebuie să fie între 1 și 100). Citește matricea de dimensiune n x m din fișier, verificând dacă valorile sunt conforme cu restricțiile (toate elementele matricei trebuie să fie mai mici sau egale cu 1000000). Returnează dimensiunile matricei n și m, împreună cu matricea citită. Funcția vecini1(n, m, matrice): Inițializează o matrice a cu n+2 rânduri și m+2 coloane, toate inițializate cu valoarea 0. Adaugă o margine de numere mari în jurul matricei matrice, astfel încât să fie mai ușor de verificat vecinii. Parcurge matricea a și verifică dacă fiecare element are toți vecinii diferiți între ei. În caz afirmativ, incrementeză numărul de astfel de elemente. Returnează numărul de elemente cu toți vecinii diferiți între ei. La final, se citește matricea din fișierul "vecini1.in", se apelează funcția vecini1() cu parametrii corespunzători și se scrie rezultatul în fișierul "vecini1.out". Rezultatul este afișat și în consolă
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width