1915 - Numar Minim 1: Diferență între versiuni

De la Universitas MediaWiki
Linia 23: Linia 23:


== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Datele de intrare
: 5 97 14
: 5 97 14
; Ieșire
: Datele sunt introduse corect.
; Datele de ieșire
: 10005
: 10005
<br>
<br>

Versiunea de la data 26 aprilie 2023 14:10

Sursa: [1]

Cerinţa

Georgiana nu are clipă de răgaz. Profesorul de info îi cere acum să afle cel mai mic număr natural de n cifre care împărţit la b dă restul r. Poate o ajutaţi să treacă şi peste acest hop.

Date de intrare

Programul citește de la tastatură numerele n, b şi r.

Date de ieșire

Programul va afișa pe ecran numărul cerut.

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează cel mai mic număr natural de n cifre care împărţit la b dă restul r.

În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."

Restricţii şi precizări

1 ≤ n ≤ 100.000

2 ≤ b ≤ 1.000.000.000

0 ≤ r < b

dacă numărul nu există se va afişa -1

Exemplul 1

Datele de intrare
5 97 14
Datele sunt introduse corect.
Datele de ieșire
10005


Rezolvare

#1915
def get_next_number(numar, n):
    """
    Returnează următorul număr natural de n cifre care urmează după numar.
    """
    return numar + 10**(n - len(str(numar))) if numar + 1 >= 10**(n - 1) else 10**(n - 1)

def find_number(n, b, r):
    """
    Găsește cel mai mic număr natural de n cifre care împărțit la b dă restul r.
    """
    numar = 0
    while True:
        numar = get_next_number(numar, n)
        if numar > 10**n - 1:
            return -1
        if numar % b == r:
            return numar

if __name__ == '__main__':
    """
    Funcția principală care citește numerele de la tastatură și afișează numărul cerut.
    """
    n = int(input("Introduceți numărul de cifre: "))
    b = int(input("Introduceți divizorul: "))
    r = int(input("Introduceți restul: "))
    if n <= 0 or n > 100000 or b < 2 or b > 1000000000 or r < 0 or r >= b:
        print("Datele nu corespund restricțiilor impuse.")
    else:
        print("Datele sunt introduse corect.")
        numar_cautat = find_number(n, b, r)
        print("Cel mai mic număr de", n, "cifre care împărțit la", b, "dă restul", r, "este", numar_cautat)

Explicatie cod: Acest cod conține 3 funcții și o funcție principală:

Funcția get_next_number(numar, n) primește un număr natural numar și numărul de cifre n și returnează următorul număr natural de n cifre care urmează după numar. Pentru aceasta, funcția adaugă 10**(n - len(str(numar))) la numar dacă numar + 1 este mai mare sau egal cu 10**(n - 1) (adică numărul numar + 1 are cel puțin n cifre), altfel returnează 10**(n - 1).

Funcția find_number(n, b, r) primește numărul de cifre n, divizorul b și restul r și returnează cel mai mic număr natural de n cifre care împărțit la b dă restul r. Funcția caută numărul începând de la 0, apelând funcția get_next_number() și verificând dacă numărul respectiv împărțit la b dă restul r. Dacă da, atunci funcția returnează numărul găsit.

Funcția principală main() citește numerele de la tastatură și afișează numărul cerut apelând funcția find_number().

Astfel, programul determină cel mai mic număr natural de n cifre care împărțit la b dă restul r folosind cele trei funcții descrise mai sus.