1910 - Numar Minim 0: Difference between revisions

From Bitnami MediaWiki
Sinn Erich (talk | contribs)
Sinn Erich (talk | contribs)
Line 37: Line 37:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#4273
#1910
def patrate_perfecte(n):
def gaseste_numar(m, b, r):
     patrate = []
     for j in range(10**(m-1), 10**m):
    i = 1
         if j % b == r:
    while len(patrate) < n:
            return j
         patrat = i * i
        patrate.append(patrat)
        i += 1
    return patrate


def validate_input(m, b, r):
    if not (1 <= m <= 100000) or not (2 <= b <= 10) or not (0 <= r < b):
        return False
    return True


def calculeaza(numbers):
if __name__ == '__main__':
     product = 1
     n = int(input("Introduceti numarul de triplete: "))
     for number in numbers:
     for i in range(n):
         product *= number
         m, b, r = map(int, input("Introduceti tripletul {} de forma m b r: ".format(i+1)).split())
    return product
        if not validate_input(m, b, r):
            print("Tripletul introdus nu respecta restricțiile!")
        else:
            print(gaseste_numar(m, b, r))


</syntaxhighlight>


def validare_numar(n):
'''Explicatie cod:'''
    if n < 1 or n > 10:
        return False
    return True


Acest program primește de la utilizator un număr n, care reprezintă numărul de triplete de forma m, b, r ce urmează să fie introduse.


if __name__ == '__main__':
Apoi, într-un for loop, pentru fiecare triplet introdus, este apelată funcția de validare validate_input care verifică dacă m respectă restricțiile de la 1 la 100000, b respectă restricțiile de la 2 la 10 și r respectă restricția de la 0 la b-1. Dacă tripletul introdus nu respectă aceste restricții, se afișează un mesaj de eroare.  
    n = int(input("Introduceți numărul n: "))
    if not validare_numar(n):
        print("Datele introduse nu corespund cerintelor.")
    else:
        squares = patrate_perfecte(n)
        product = calculeaza(squares)
        print("Datele introduse corespund cerintelor.")
        print(product)


Dacă tripletul este valid, atunci este apelată funcția gaseste_numar, care găsește cel mai mic număr natural cu m cifre, care împărțit la b dă restul r și îl afișează pe ecran.


</syntaxhighlight>
Funcția gaseste_numar lucrează în felul următor: pentru fiecare număr j din intervalul [10**(m-1), 10**m), verifică dacă j împărțit la b dă restul r. Dacă da, atunci acesta este cel mai mic număr cu m cifre care împărțit la b dă restul r și îl returnează. Dacă nu, continuă cu următorul număr până găsește unul care să satisfacă condiția dată.

Revision as of 21:04, 2 April 2023

Sursa: [1]

Cerinţa

Georgiana a mai primit o problemă de la doamna profesor. Se dau n triplete de forma m, b, r, iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu m cifre, care împărţit la b dă restul r.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n triplete de numere naturale.

Date de ieșire

Programul va afișa pe ecran, pe linii separate, cele n numere cerute.


Dacă datele sunt introduse corect, programul va rula.

În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

1 ≤ n ≤ 10

1 ≤ m ≤ 100.000

2 ≤ b ≤ 10

0 ≤ r < b

Exemplul 1

Intrare
3
2 3 1
3 5 4
4 6 0
Ieșire
10
104
1002


Rezolvare

<syntaxhighlight lang="python" line>

  1. 1910

def gaseste_numar(m, b, r):

   for j in range(10**(m-1), 10**m):
       if j % b == r:
           return j

def validate_input(m, b, r):

   if not (1 <= m <= 100000) or not (2 <= b <= 10) or not (0 <= r < b):
       return False
   return True

if __name__ == '__main__':

   n = int(input("Introduceti numarul de triplete: "))
   for i in range(n):
       m, b, r = map(int, input("Introduceti tripletul {} de forma m b r: ".format(i+1)).split())
       if not validate_input(m, b, r):
           print("Tripletul introdus nu respecta restricțiile!")
       else:
           print(gaseste_numar(m, b, r))

</syntaxhighlight>

Explicatie cod:

Acest program primește de la utilizator un număr n, care reprezintă numărul de triplete de forma m, b, r ce urmează să fie introduse.

Apoi, într-un for loop, pentru fiecare triplet introdus, este apelată funcția de validare validate_input care verifică dacă m respectă restricțiile de la 1 la 100000, b respectă restricțiile de la 2 la 10 și r respectă restricția de la 0 la b-1. Dacă tripletul introdus nu respectă aceste restricții, se afișează un mesaj de eroare.

Dacă tripletul este valid, atunci este apelată funcția gaseste_numar, care găsește cel mai mic număr natural cu m cifre, care împărțit la b dă restul r și îl afișează pe ecran.

Funcția gaseste_numar lucrează în felul următor: pentru fiecare număr j din intervalul [10**(m-1), 10**m), verifică dacă j împărțit la b dă restul r. Dacă da, atunci acesta este cel mai mic număr cu m cifre care împărțit la b dă restul r și îl returnează. Dacă nu, continuă cu următorul număr până găsește unul care să satisfacă condiția dată.