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
0187 - CifFrecv
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/187/ciffrecv 0187 - CifFrecv] ---- ==Cerinţă== Să se scrie un program care citeşte cel mult <code>1.000.000</code> de numere naturale din intervalul închis <code>[0,9]</code> şi determină cel mai mare număr prim citit şi numărul său de apariții. ==Date de intrare== Programul va citi de la tastatură cel mult <code>1.000.000</code> numere naturale din intervalul închis <code>[0,9]</code>, separate prin spaţii. ==Date de ieșire== Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi se vor afișa două numere naturale <code>MAX</code> şi <code>NR_AP.</code> În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!". ==Restricţii şi precizări== *1 <= n <= 1000000 *valorile elementelor șirului vor fi cuprinse între 0 și 9 ==Exemple== ===Exemplul 1=== ;Intrare :Introduceti numere de maxim o cifra separate prin spatiu:1 2 3 4 5 6 7 8 9 ;Ieșire :Datele introduse sunt corecte! :7 1 ===Exemplul 2=== ;Intrare :Introduceti numere de maxim o cifra separate prin spatiu:12 1 2 3 ;Ieșire :Datele introduse sunt incorecte! ===Exemplul 3=== ;Intrare :Introduceti numere de maxim o cifra separate prin spatiu:1 2 3 3 3 6 ;Ieșire :Datele introduse sunt corecte! :3 3 : ==Rezolvare== <syntaxhighlight lang="python" line="1"> def is_integer(value): return value.isdigit() def este_prim(n): if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True def verificare_vector(vector): n = 0 for i in vector: if is_integer(i): if 0 < int(i) < 10: n += 1 else: print("Datele introduse sunt incorecte!") exit() else: print("Datele introduse sunt incorecte!") exit() if n > 1000000 or n < 0: print("Datele introduse sunt incorecte!") exit() def cel_mai_mare_prim_si_aparitii(lst): aparitii = {} cel_mai_mare_prim = None for nr in lst: if este_prim(nr): if nr in aparitii: aparitii[nr] += 1 else: aparitii[nr] = 1 if cel_mai_mare_prim is None or nr > cel_mai_mare_prim: cel_mai_mare_prim = nr if cel_mai_mare_prim is None: print("Nu s-au găsit numere prime în listă.") exit() max_aparitii = max(aparitii.values()) for nr, aparitie in aparitii.items(): if aparitie == max_aparitii and nr > cel_mai_mare_prim: cel_mai_mare_prim = nr print(cel_mai_mare_prim, max_aparitii) if __name__ == '__main__': elem = input(f"Introduceti numere de maxim o cifra separate prin spatiu:").split() verificare_vector(elem) lst_int = list(map(int, elem)) print("Datele introduse sunt corecte!") cel_mai_mare_prim_si_aparitii(lst_int) </syntaxhighlight> ==Explicație rezolvare== Acest program citeste de la tastatură o listă de numere naturale cu o singură cifră, cu o limită maximă de 1.000.000 de numere, iar apoi determină cel mai mare număr prim din listă și numărul său de apariții în listă. Funcția <code>is_integer(value)</code> verifică dacă o valoare dată este un număr întreg. Funcția <code>este_prim(n)</code> primește un număr <code>n</code> și returnează <code>True</code> dacă acesta este un număr prim, <code>False</code> altfel. Funcția verifică numerele în intervalul <code>[2, sqrt(n)]</code>, pentru a optimiza timpul de execuție. Funcția <code>verificare_vector(vector)</code> primește o listă și verifică dacă toate elementele acesteia sunt numere întregi cu o singură cifră, iar numărul total de elemente nu depășește 1.000.000. Funcția <code>cel_mai_mare_prim_si_aparitii(lst)</code> primește lista de numere și determină cel mai mare număr prim din listă și numărul său de apariții. Verifică fiecare număr dacă este prim și dacă da, îl adaugă într-un dicționar, cu numărul de apariții. Dacă un număr prim are mai multe apariții decât numărul cel mai mare prim de până acum, atunci acesta devine noul număr cel mai mare prim. Programul afișează numărul cel mai mare prim și numărul său de apariții în listă. Dacă nu există numere prime în listă, se afișează un mesaj corespunzător.
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