2206 - Min Impar

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinţa

Se dă un număr X. Să se afle cel mai mic număr Y ≥ X cu proprietatea că Y are doar cifre impare.

Date de intrare

Programul citește de la tastatură numărul X.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran: "Datele sunt introduse corect.",programul va afișa pe ecran numărul Y. În cazul în care datele nu respectă restricțiile, se va afișa: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ X ≤ 10^18


Exemple

Exemplul 1

Intrare
22
Ieșire
31

Exemplul 2

Intrare
10
Ieșire
11

Exemplul 3

Intrare
-2
Ieșire
Datele nu corespund restricțiilor impuse.



Rezolvare

# 2206 - Min Impar
def validare_date(x: int) -> bool:
    """
    Verifică dacă datele de intrare sunt valide conform cerințelor.
    """
    return 1 <= x <= 10 ** 18


def gaseste_numar_imp(x: int) -> int:
    """
    Găsește cel mai mic număr Y ≥ X cu proprietatea că Y are doar cifre impare.
    """
    while True:
        if all(int(d) % 2 == 1 for d in str(x)):
            return x
        x += 1


if __name__ == '__main__':
    x = int(input("Introduceți numărul X: "))
    if not validare_date(x):
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    print("Datele sunt introduse corect.")
    y = gaseste_numar_imp(x)
    print(y)

Explicatie

Funcția validare_date(x: int) -> bool: Această funcție verifică dacă numărul x primit ca argument se încadrează în intervalul [1, 10^18] și returnează True dacă acesta este valid și False altfel. Astfel, această funcție este folosită pentru a valida datele de intrare înainte de a executa funcția gaseste_numar_imp.

Funcția gaseste_numar_imp(x: int) -> int: Această funcție primește un număr x și începe să-l mărească treptat până când găsește cel mai mic număr Y care are doar cifre impare și Y este mai mare sau egal cu X. În fiecare iterație, funcția verifică dacă toate cifrele numărului curent sunt impare. Dacă este așa, atunci funcția returnează numărul curent, altfel continuă să-l mărească pe x cu o unitate și să reia verificarea.

Blocul if __name__ == '__main__':: Acest bloc verifică dacă acest script este rulat direct ca fișier executabil sau a fost importat în alt modul Python. În cazul în care acesta este rulat direct, atunci se solicită utilizatorului să introducă un număr întreg x și se validează acest număr folosind funcția validare_date. Dacă numărul este valid, atunci se calculează cel mai mic număr Y care are doar cifre impare și este mai mare sau egal cu X, folosind funcția gaseste_numar_imp. În cele din urmă, numărul Y este afișat pe ecran.