0364 - Cifre 1

De la Universitas MediaWiki

sursa: [1]

Cerinţa

Se dau un numar de numere naturale. Determinați numărul pentru care prima cifră este maximă.

Date de intrare

Programul citește de la tastatură un număr, iar apoi acel numar de numere naturale, separate prin spaţii.

Date de ieşire

Programul afișează pe ecran numărul cerut

Restricții și precizări

  • 1 ≤ numar ≤ 1000
  • cele n numere citite vor avea cel mult 9 cifre
  • dacă există mai multe numere pentru care prima cifră este maximă, se va determina cel mai mare dintre acestea

Exemplu

Intrare
5
2467 645 687 59878 125
Ieșire
Datele sunt introduse corect.
687

Explicatie

Există două numere pentru care prima cifră este maximă. Dintre acestea, cel mai mare este 687.

Rezolvare

Rezolvare ver. 1

def citeste_numar_intreg(mesaj):
    while True:
        try:
            numar = int(input(mesaj))
            return numar
        except ValueError:
            print("Introduceți un număr valid.")


def determina_numar_maxim(n):
    max_num = -1
    max_first_digit = -1

    for i in range(n):
        while True:
            num = citeste_numar_intreg(f"Introduceți numărul {i + 1}: ")
            if num < 10:
                print("Numărul trebuie să fie natural și să aibă cel puțin două cifre.")
                continue
            break

        first_digit = int(str(num)[0])

        if first_digit > max_first_digit:
            max_first_digit = first_digit
            max_num = num
        elif first_digit == max_first_digit and num > max_num:
            max_num = num

    return max_num


if __name__ == "__main__":
    while True:
        n = citeste_numar_intreg("Introduceți numărul de numere: ")
        if n < 1 or n > 1000:
            print("Numărul de numere trebuie să fie un număr natural între 1 și 1000.")
            continue
        break

    numar_maxim = determina_numar_maxim(n)
    print("Datele sunt introduse corect.")
    print(f"Numărul cu prima cifră maximă este {numar_maxim}.")

Rezolvare ver. 2

while True:
    try:
        # Citim numărul de numere de la tastatură
        n = int(input("Introduceți numărul de numere: "))
        # Verificăm dacă numărul este între 1 și 1000
        if n < 1 or n > 1000:
            print("Numărul de numere trebuie să fie un număr natural între 1 și 1000.")
            continue
        # Dacă numărul este corect, ieșim din bucla while
        break
    except ValueError:
        # Dacă utilizatorul introduce o valoare care nu poate fi convertită într-un număr întreg,
        # afișăm un mesaj de eroare și reluăm citirea
        print("Introduceți un număr valid.")

# Inițializăm variabilele max_num și max_first_digit cu valori minime
max_num = -1
max_first_digit = -1

# Citim cele n numere de la tastatură și determinăm numărul cu prima cifră maximă
for i in range(n):
    while True:
        try:
            # Citim numărul i de la tastatură
            num = int(input(f"Introduceți numărul {i + 1}: "))
            # Verificăm dacă numărul are cel puțin două cifre
            if num < 10:
                print("Numărul trebuie să fie natural și să aibă cel puțin două cifre.")
                continue
            # Dacă numărul este corect, ieșim din bucla while
            break
        except ValueError:
            # Dacă utilizatorul introduce o valoare care nu poate fi convertită într-un număr întreg,
            # afișăm un mesaj de eroare și reluăm citirea
            print("Introduceți un număr valid.")

    # Determinăm prima cifră a numărului
    first_digit = int(str(num)[0])

    # Verificăm dacă prima cifră a numărului este mai mare decât oricare alta primă cifră întâlnită până acum
    if first_digit > max_first_digit:
        # Dacă da, actualizăm variabilele max_num și max_first_digit cu valorile corespunzătoare
        max_first_digit = first_digit
        max_num = num
    # Dacă prima cifră a numărului este egală cu cea mai mare primă cifră întâlnită până acum,
    # verificăm dacă numărul este mai mare decât cel mai mare număr cu prima cifră maximă întâlnit până acum
    elif first_digit == max_first_digit and num > max_num:
        # Dacă da, actualizăm variabila max_num cu noul număr
        max_num = num
print("Datele sunt introduse corect.")
# Afisam rezultatul
print(f"Numărul cu prima cifră maximă este {max_num}.")