1915 - Numar Minim 1: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
Line 9: | Line 9: | ||
Programul va afișa pe ecran numărul cerut. | Programul va afișa pe ecran numărul cerut. | ||
Dacă datele sunt introduse corect, | 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 | În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse." | ||
== Restricţii şi precizări == | == Restricţii şi precizări == |
Revision as of 11:06, 25 April 2023
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
- Intrare
- 5 97 14
- Ieșire
- 10005
Rezolvare
<syntaxhighlight lang="python" line>
- 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("Date de intrare incorecte") else: 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)
</syntaxhighlight>
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.