0171 - Prima Cifra Minima

De la Universitas MediaWiki

Sursă: [1]

Cerință

Să se scrie un program care citește un șir de n numere naturale şi determină numărul din șir care are prima cifră minimă. Dacă există mai multe numere cu prima cifră minimă, se va determina cel mai mare dintre acestea.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale.

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 cerut. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricții și precizări

  • 1 ≤ n ≤ 10000
  • cele n numere citite vor fi mai mici decât 2.000.000.000

Exemple

Exemplu 1

Intrare
5
72 30 12 165 725
Ieșire
165

Exemplu 2

Intrare
4
72 30 12 165 725
Ieșire
165

Exemplu 3

Intrare
5
72 30 12 165 725
Ieșire
165

Rezolvare

def citeste_n():
    while True:
        try:
            n = int(input("Introduceti numarul de valori: "))
            if n >= 1 and n <= 1000:
                print("Datele sunt corecte.")
                return n
            else:
                print("Datele nu sunt conform restricțiilor impuse.")
        except ValueError:
            print("Trebuie introduse doar numere intregi.")

def citeste_valori(n):
    valori = []
    for i in range(n):
        while True:
            try:
                valoare = int(input("Introduceti o valoare: "))
                if valoare > 0 and valoare <= 2000000000 :
                    print("Datele sunt corecte.")
                    valori.append(valoare)
                    break
                else:
                    print("Datele nu sunt conform restricțiilor impuse.")
            except ValueError:
                print("Trebuie introduse doar valori naturale cu mai putin de 9 cifre.")

    return valori

def primacif(n):
    while n >= 10:
        n = n // 10
    return n

def cifra_minim(valori):
    mini = 10
    max_primacif = 0
    for valoare in valori:
        primacifra = primacif(valoare)
        if primacifra < mini:
            mini = primacifra
            max_primacif = valoare
        elif primacifra == mini and valoare > max_primacif:
            max_primacif = valoare
    return max_primacif

if _name_ == '_main_':
    n = citeste_n()
    valori = citeste_valori(n)
    min = cifra_minim(valori)
    print("Numarul cu prima cifra minima si maxim dintre acestea este:", min)

Explicați

Acest cod este o implementare a unui program care citeste un numar n si apoi citeste n valori de la utilizator, aplica anumite restricții asupra acestora și determină numărul cu prima cifră minimă și maximă dintre acestea.

  Funcția "citeste_n()" primește input de la utilizator pentru numărul de valori pe care utilizatorul dorește să le introducă. În timp ce utilizatorul nu introduce un număr valid (un întreg între 1 și 1000), programul afișează un mesaj corespunzător și cere din nou input. Dacă utilizatorul introduce un număr valid, funcția returnează acest număr.
  Funcția "citeste_valori(n)" primește numărul de valori introduse de utilizator și returnează o listă cu valorile introduse de utilizator. În timp ce utilizatorul introduce valorile, programul aplică restricții asupra acestora: valorile trebuie să fie numere întregi pozitive mai mici decât 2 miliarde. Dacă utilizatorul introduce o valoare invalidă, programul afișează un mesaj corespunzător și cere din nou input.
  Funcția "primacif(n)" primește un număr și returnează prima cifră a acestuia.
  Funcția "cifra_minim(valori)" primește o listă de valori și determină numărul cu prima cifră minimă și maximă dintre acestea. Pentru fiecare valoare din listă, programul determină prima cifră și verifică dacă aceasta este mai mică decât cifra minimă până în acel moment. Dacă aceasta este mai mică, numărul devine noul minim. Dacă este egală cu cifra minimă, programul verifică dacă numărul respectiv este mai mare decât numărul cu prima cifră minimă și maximă până în acel moment și, dacă da, numărul devine noul număr cu prima cifră minimă și maximă. La sfârșit, funcția returnează numărul cu prima cifră minimă și maximă.
  În programul principal, funcțiile "citeste_n()", "citeste_valori(n)" și "cifra_minim(valori)" sunt apelate în ordine pentru a citi valorile de la utilizator și a determina numărul cu prima cifră minimă și maximă. Acest număr este apoi afișat la consolă.