4001 - Min Max K 9: Diferență între versiuni

De la Universitas MediaWiki
(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...)
 
Fără descriere a modificării
Linia 31: Linia 31:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
k = int(input("Introduceti cifra k: "))
def citeste_k():
numere = []
    while True:
while True:
        try:
    n = int(input("Introduceti un numar: "))
            k = int(input("Introduceti cifra k: "))
    if n == 0:
            if 0 <= k <= 9:
         break
                print("Datele sunt corecte.")
    numere.append(n)
                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():
    print("NU EXISTA")
    numere = []
else:
    while True:
    min_nr_cu_k = min([nr for nr in numere if nr % 10 == k])
        try:
    max_nr_cu_k = max([nr for nr in numere if nr % 10 == k])
            n = int(input("Introduceti un numar: "))
    numere_intre = [nr for nr in numere if min_nr_cu_k <= nr <= max_nr_cu_k and nr % 10 == k]
            if 0 <= n <= 1000000:
    print(len(numere_intre))
                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 ==
Dintre numerele citite după 5 (care este k din enunț), cele care au ultima cifră egală cu 5 sunt 45, 5505, 15 și 75. Cel mai mare este 5505 și cel mai mic este 15. Numerele citite între ele (inclusiv ele) sunt 5505, 7884 și 15, adică în număr de 3.
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ă.

Versiunea de la data 20 aprilie 2023 14:50

ursă: [1]

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 de intrare

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

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

  • 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

Exemplu 1

Date de intrare
5 45 44 5505 7884 15 75 530 0
Date de iesire
3

Exemplu 2

Date de intrare
4
1 2 3 4
Date de iesire
Datele sunt corecte. Rezultat: 4

Exemplu 3

Date de intrare
3
76968635425 456 6
Date de iesire
Datele introduse nu corespund cerinței.

Rezolvare

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)

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ă.