1915 - Numar Minim 1: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
 
(3 intermediate revisions by the same user not shown)
Line 4: Line 4:


== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numerele''' n, b şi restul'''.
Programul citește de la tastatură numerele''' n, b şi rest'''.


== Date de ieșire ==  
== Date de ieșire ==  
Programul va afișa pe ecran numărul cerut.
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.
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 '''rest'''.


În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
Line 32: Line 32:
; Datele de ieșire
; Datele de ieșire
: Datele sunt introduse corect.
: Datele sunt introduse corect.
: 10005
: Cel mai mic număr de 5 cifre care împărțit la 97 dă restul 14 este 10005
<br>
<br>


Line 44: Line 44:
     return numar + 10**(n - len(str(numar))) if numar + 1 >= 10**(n - 1) else 10**(n - 1)
     return numar + 10**(n - len(str(numar))) if numar + 1 >= 10**(n - 1) else 10**(n - 1)


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


def validate_input(n, b, r):
def validate_input(n, b, rest):
     """
     """
     Verifică dacă valorile introduse pentru n, b și r respectă restricțiile impuse.
     Verifică dacă valorile introduse pentru n, b și rest respectă restricțiile impuse.
     """
     """
     if n <= 0 or n > 100000 or b < 2 or b > 1000000000 or r < 0 or r >= b:
     if n <= 0 or n > 100000 or b < 2 or b > 1000000000 or rest < 0 or rest >= b:
         print("Datele nu corespund restricțiilor impuse.")
         print("Datele nu corespund restricțiilor impuse.")
         return False
         return False
Line 73: Line 73:
     n = int(input("Introduceți numărul de cifre: "))
     n = int(input("Introduceți numărul de cifre: "))
     b = int(input("Introduceți divizorul: "))
     b = int(input("Introduceți divizorul: "))
     r = int(input("Introduceți restul: "))
     rest = int(input("Introduceți restul: "))


     if not validate_input(n, b, r):
     if not validate_input(n, b, rest):
         exit()
         exit()


     numar_cautat = find_number(n, b, r)
     numar_cautat = find_number(n, b, rest)
     print("Cel mai mic număr de", n, "cifre care împărțit la", b, "dă restul", r, "este", numar_cautat)
     print("Cel mai mic număr de", n, "cifre care împărțit la", b, "dă restul", rest, "este", numar_cautat)




Line 88: Line 88:
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 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 find_number(n, b, rest) primește numărul de cifre n, divizorul b și restul rest și returnează cel mai mic număr natural de n cifre care împărțit la b dă restul rest. 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 rest. 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().
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.
Astfel, programul determină cel mai mic număr natural de n cifre care împărțit la b dă restul rest folosind cele trei funcții descrise mai sus.

Latest revision as of 20:08, 29 April 2023

Sursa: [1]

Cerinţa[edit | edit source]

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 rest. Poate o ajutaţi să treacă şi peste acest hop.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

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 rest.

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

Restricţii şi precizări[edit | edit source]

1 ≤ n ≤ 100.000

2 ≤ b ≤ 1.000.000.000

0 ≤ rest < b

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

Exemplul 1[edit | edit source]

Datele de intrare
Introduceți numărul de cifre:
5
Introduceți divizorul:
97
Introduceți restul:
14
Datele de ieșire
Datele sunt introduse corect.
Cel mai mic număr de 5 cifre care împărțit la 97 dă restul 14 este 10005


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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, rest):

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

def validate_input(n, b, rest):

   """
   Verifică dacă valorile introduse pentru n, b și rest respectă restricțiile impuse.
   """
   if n <= 0 or n > 100000 or b < 2 or b > 1000000000 or rest < 0 or rest >= b:
       print("Datele nu corespund restricțiilor impuse.")
       return False
   print("Datele sunt introduse corect.")
   return True


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: "))
   rest = int(input("Introduceți restul: "))
   if not validate_input(n, b, rest):
       exit()
   numar_cautat = find_number(n, b, rest)
   print("Cel mai mic număr de", n, "cifre care împărțit la", b, "dă restul", rest, "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, rest) primește numărul de cifre n, divizorul b și restul rest și returnează cel mai mic număr natural de n cifre care împărțit la b dă restul rest. 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 rest. 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 rest folosind cele trei funcții descrise mai sus.