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

De la Universitas MediaWiki
Linia 1: Linia 1:
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
Sursa: [https://www.pbinfo.ro/probleme/4273/prodpp]
== Cerinţa ==
== Cerinţa ==
Se dă numărul natural nenul '''n'''. Să se determine produsul primelor '''n''' pătrate perfecte nenule.
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 ==
== Date de intrare ==
Programul citește de la tastatură numerele''' n, b şi r'''.
Programul citește de la tastatură numerele''' n, b şi r'''.

Versiunea de la data 1 aprilie 2023 10:21

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.

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

Intrare
5 97 14
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 % b == r:
            return numar

def 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: "))
    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)

# Apelăm funcția principală
main()

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.