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
2275 - Minim Doua
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/2275/minimdoua] == Cerinţa == Se dau '''n''' numere naturale. Determinați cele mai mici două numere dintre cele introduse care au ultimele două cifre egale. Dacă nu există cel puțin două astfel de numere se va afișa '''numere insuficiente'''. == Date de intrare == Fișierul de intrare '''minimdoua.in''' conține pe prima linie numărul '''n''', iar pe a doua linie '''n''' numere naturale separate prin spații. == Date de ieșire == Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte." Fișierul de ieșire '''minimdoua.out''' va conține pe prima linie numerele '''minim1''' si '''minim2''', reprezentând minimele cerute, în ordine crescătoare, dacă fișierul de intrare conține cel puțin două astfel de numere, respectiv '''numere insuficiente''', în caz contrar. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.". == Restricții și precizări == * '''1 ≤ n ≤ 200''' * pentru fiecare număr x de pe a doua linie a fișierului de intrare este îndeplinită relația '''0 ≤ x ≤ 1.000.000''' * minimele cerute vor avea cel puțin două cifre == Exemple == === Exemplu 1 === ; '''minimdoua.in''' : 7 : 12 55 112 322 477 115 7 ; '''minimdoua.out''' : 55 322 === Exemplu 2 === ; '''minimdoua.in''' : 6 : 12 55 112 3 4774 115 ; '''minimdoua.out''' : numere insuficiente ==== Explicație ==== În fișierul de intrare este doar un singur număr cu proprietatea cerută. == Rezolvare == <syntaxhighlight lang="python" line="1"> def citeste_n(): while True: try: with open("minimdoua.in", "r") as fin: n = int(fin.readline()) if n >= 2 and n <= 1000: print("Datele sunt corecte.") return n else: print("Datele nu sunt conform restricțiilor impuse.") exit() except ValueError: print("Trebuie introduse doar numere intregi.") exit() def citeste_valori(n): valori = [] for i in range(n): with open("minimdoua.in", "r") as fin: fin.readline() linie = fin.readline().strip().split() while len(linie) != n: linie += fin.readline().strip().split() try: if len(linie[i]) <= 9: print("Datele sunt corecte.") valori.append(int(linie[i])) else: print("Trebuie introduse doar valori cu mai putin de 9 cifre.") exit() except ValueError: print("Trebuie introduse doar valori cu mai putin de 9 cifre.") exit() return valori def minim_doua(valori): a = [] v = [] for i in range(len(valori)): if valori[i] % 10 == (valori[i] // 10) % 10 and valori[i] > 9: v.append(valori[i]) v.sort() if len(v) >= 2: return v[0], v[1] else: return "numere insuficiente" if _name_ == '_main_': n = citeste_n() valori = citeste_valori(n) minim1, minim2 = minim_doua(valori) with open("minimdoua.out", 'w') as f: if isinstance(minim1, str): f.write(minim1) else: f.write(str(minim1) + ' ' + str(minim2)) </syntaxhighlight> == Explicații == Acesta este un cod Python care rezolvă o problemă de găsire a celor mai mici două numere întregi pozitive cu aceeași cifră zecimală de unitate. Funcția citeste_n() deschide fișierul "minimdoua.in" și încearcă să citească un singur număr întreg de pe prima linie. Dacă numărul îndeplinește condițiile de a fi între 2 și 1000, atunci funcția va returna acest număr. În caz contrar, se va afișa un mesaj de eroare și se va ieși din program. Funcția citeste_valori(n) primește ca argument numărul de valori pe care trebuie să le citească. Apoi, pentru fiecare linie din fișier, funcția va citi o linie, va elimina caracterele de tip newline și apoi va împărți acea linie în cuvinte. Dacă numărul de cuvinte împărțite nu este egal cu n, atunci vor fi citite noi linii până când numărul de cuvinte va fi egal cu n. În continuare, funcția va verifica fiecare cuvânt și dacă lungimea sa este mai mică sau egală cu 9, va adăuga numărul într-o listă. Altfel, se va afișa un mesaj de eroare și se va ieși din program. Funcția va returna lista de numere citite. Funcția minim_doua(valori) primește lista de numere și va adăuga numerele care îndeplinesc condiția specificată într-o altă listă, v. Această listă va fi sortată în ordine crescătoare, iar dacă are cel puțin două elemente, atunci primele două elemente vor fi cele două numere cu cifra zecimală de unitate identică și mai mici. Altfel, funcția va returna un mesaj care indică faptul că lista de numere nu are suficiente elemente. În funcția principală _main_, se vor apela funcțiile citeste_n(), citeste_valori(n) și minim_doua(valori) pentru a obține cele mai mici două numere întregi pozitive cu aceeași cifră zecimală de unitate. Apoi, rezultatele vor fi scrise în fișierul "minimdoua.out" în funcție de rezultatul returnat de minim_doua(valori). Dacă funcția returnează un mesaj de eroare, atunci mesajul va fi scris în fișier.
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