4001 - Min Max K 9: Difference between revisions
Andor Giulia (talk | contribs) Pagină nouă: ursă: [https://www.pbinfo.ro/probleme/4001/minmaxk9] == Cerinţa == Se citește o cifră '''k''' și apoi se citesc numere naturale distincte de la tastatură până la apariția lui zero. Afișați câte dintre numerele citite după '''k''' sunt cuprinse între cel mai mic și cel mai mare număr cu proprietatea că are ultima cifră egală cu '''k'''. Dacă niciunul dintre numerele citite nu are ultima cifră egală cu '''k''', atunci se va afișa '''NU EXISTA'''. == Date... |
AndorGiulia (talk | contribs) No edit summary |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
Sursă: [https://www.pbinfo.ro/probleme/4001/minmaxk9] | |||
== Cerinţa == | == Cerinţa == | ||
Se citește o cifră '''k''' și apoi se citesc numere naturale distincte de la tastatură până la apariția lui zero. Afișați câte dintre numerele citite după '''k''' sunt cuprinse între cel mai mic și cel mai mare număr cu proprietatea că are ultima cifră egală cu '''k'''. Dacă niciunul dintre numerele citite nu are ultima cifră egală cu '''k''', atunci se va afișa '''NU EXISTA'''. | Se citește o cifră '''k''' și apoi se citesc numere naturale distincte de la tastatură până la apariția lui zero. Afișați câte dintre numerele citite după '''k''' sunt cuprinse între cel mai mic și cel mai mare număr cu proprietatea că are ultima cifră egală cu '''k'''. Dacă niciunul dintre numerele citite nu are ultima cifră egală cu '''k''', atunci se va afișa '''NU EXISTA'''. | ||
Line 31: | Line 31: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
k = int(input("Introduceti cifra k: ")) | def citeste_k(): | ||
while True: | |||
try: | |||
k = int(input("Introduceti cifra k: ")) | |||
if 0 <= k <= 9: | |||
print("Datele sunt corecte.") | |||
return k | |||
else: | |||
print("Datele nu sunt conform restricțiilor impuse.") | |||
except ValueError: | |||
print("Trebuie introduse doar numere intregi.") | |||
numere_cu_k = [nr for nr in numere if nr % 10 == k] | |||
if len(numere_cu_k) == 0: | def citeste_valori(): | ||
numere = [] | |||
else: | while True: | ||
try: | |||
n = int(input("Introduceti un numar: ")) | |||
if 0 <= n <= 1000000: | |||
numere.append(n) | |||
if n == 0: | |||
break | |||
else: | |||
print("Datele nu sunt conform restricțiilor impuse.") | |||
except ValueError: | |||
print("Trebuie introduse doar valori cu mai putin de 9 cifre.") | |||
return numere | |||
def numere_cu_ultima_cifra_k(numere, k): | |||
numere_cu_k = [nr for nr in numere if nr % 10 == k] | |||
if len(numere_cu_k) == 0: | |||
print("NU EXISTA") | |||
else: | |||
min_nr_cu_k = min(numere_cu_k) | |||
max_nr_cu_k = max(numere_cu_k) | |||
numere_intre = [nr for nr in numere if min_nr_cu_k <= nr <= max_nr_cu_k and nr % 10 == k] | |||
print(len(numere_intre)) | |||
if _name_ == '_main_': | |||
k = citeste_k() | |||
valori = citeste_valori() | |||
numere_cu_ultima_cifra_k(valori, k) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicație == | == Explicație == | ||
Acest cod are ca scop rezolvarea problemei de a număra câte dintre numerele citite după o cifră k sunt cuprinse între cel mai mic și cel mai mare număr cu proprietatea că are ultima cifră egală cu k. Programul citește de la tastatură cifra k și apoi numere naturale distincte până la apariția lui zero, stocate într-o listă. În funcția citeste_k(), cifra k este citită și verificată dacă este între 0 și 9. În caz contrar, se afișează un mesaj de eroare. În funcția citeste_valori(), numerele sunt citite și verificate dacă sunt între 0 și 1000000 și adăugate în listă. În cazul în care se introduce 0, citirea se încheie și nu se adaugă în listă. Dacă se introduce o valoare care nu respectă restricțiile, se afișează un mesaj de eroare. | |||
În funcția numere_cu_ultima_cifra_k(), lista de numere este parcursă și se generează o altă listă care conține doar numerele cu ultima cifră egală cu cifra k. Dacă nu există niciun număr cu această proprietate, se afișează "NU EXISTA". Altfel, se găsesc cel mai mic și cel mai mare număr din lista numere_cu_k și se numără câte dintre numerele inițiale se încadrează între aceste valori și au ultima cifră egală cu k. Rezultatul este afișat la consolă. |
Latest revision as of 18:31, 27 April 2023
Sursă: [1]
Cerinţa[edit | edit source]
Se citește o cifră k și apoi se citesc numere naturale distincte de la tastatură până la apariția lui zero. Afișați câte dintre numerele citite după k sunt cuprinse între cel mai mic și cel mai mare număr cu proprietatea că are ultima cifră egală cu k. Dacă niciunul dintre numerele citite nu are ultima cifră egală cu k, atunci se va afișa NU EXISTA.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul k și apoi numere naturale distincte. Citirea se încheie la introducerea valorii 0, care nu se prelucrează.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.",Programul afișează pe ecran numărul de numere citite între numărul minim și cel maxim (inclusiv acestea) cu proprietatea cerută. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".
Restricții și precizări[edit | edit source]
- numerele citite aparțin intervalului [0,1.000.000] și sunt distincte (diferite două câte două).
- 0<=k<=9.
- în total se citesc cel mult 200000 de numere.
Exemple[edit | edit source]
Exemplu 1[edit | edit source]
- Date de intrare
- 5 45 44 5505 7884 15 75 530 0
- Date de iesire
- 3
Exemplu 2[edit | edit source]
- Date de intrare
- 4
- 1 2 3 4
- Date de iesire
- Datele sunt corecte. Rezultat: 4
Exemplu 3[edit | edit source]
- Date de intrare
- 3
- 76968635425 456 6
- Date de iesire
- Datele introduse nu corespund cerinței.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def citeste_k():
while True: try: k = int(input("Introduceti cifra k: ")) if 0 <= k <= 9: print("Datele sunt corecte.") return k else: print("Datele nu sunt conform restricțiilor impuse.") except ValueError: print("Trebuie introduse doar numere intregi.")
def citeste_valori():
numere = [] while True: try: n = int(input("Introduceti un numar: ")) if 0 <= n <= 1000000: numere.append(n) if n == 0: break else: print("Datele nu sunt conform restricțiilor impuse.") except ValueError: print("Trebuie introduse doar valori cu mai putin de 9 cifre.") return numere
def numere_cu_ultima_cifra_k(numere, k):
numere_cu_k = [nr for nr in numere if nr % 10 == k] if len(numere_cu_k) == 0: print("NU EXISTA") else: min_nr_cu_k = min(numere_cu_k) max_nr_cu_k = max(numere_cu_k) numere_intre = [nr for nr in numere if min_nr_cu_k <= nr <= max_nr_cu_k and nr % 10 == k] print(len(numere_intre))
if _name_ == '_main_':
k = citeste_k() valori = citeste_valori() numere_cu_ultima_cifra_k(valori, k)
</syntaxhighlight>
Explicație[edit | edit source]
Acest cod are ca scop rezolvarea problemei de a număra câte dintre numerele citite după o cifră k sunt cuprinse între cel mai mic și cel mai mare număr cu proprietatea că are ultima cifră egală cu k. Programul citește de la tastatură cifra k și apoi numere naturale distincte până la apariția lui zero, stocate într-o listă. În funcția citeste_k(), cifra k este citită și verificată dacă este între 0 și 9. În caz contrar, se afișează un mesaj de eroare. În funcția citeste_valori(), numerele sunt citite și verificate dacă sunt între 0 și 1000000 și adăugate în listă. În cazul în care se introduce 0, citirea se încheie și nu se adaugă în listă. Dacă se introduce o valoare care nu respectă restricțiile, se afișează un mesaj de eroare.
În funcția numere_cu_ultima_cifra_k(), lista de numere este parcursă și se generează o altă listă care conține doar numerele cu ultima cifră egală cu cifra k. Dacă nu există niciun număr cu această proprietate, se afișează "NU EXISTA". Altfel, se găsesc cel mai mic și cel mai mare număr din lista numere_cu_k și se numără câte dintre numerele inițiale se încadrează între aceste valori și au ultima cifră egală cu k. Rezultatul este afișat la consolă.