1910 - Numar Minim 0: 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 ==
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'''.
Georgiana a mai primit o problemă de la doamna profesor. Se dau '''n''' triplete de forma '''n_cifre, m_cifre, rest,''' iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu '''n_cifre''' cifre, care împărţit la '''m_cifre''' dă restul '''rest'''.


== Date de intrare ==
== Date de intrare ==

Versiunea de la data 27 aprilie 2023 21:54

Sursa: [1]

Cerinţa

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

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, pe ecran se va afișa: "Datele sunt introduse corect.", apoi pe un rând nou afișează care este cel mai mic număr natural format cu m 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 ≤ 10

1 ≤ m ≤ 100.000

2 ≤ b ≤ 10

0 ≤ r < b

Exemplul 1

Datele de intrare
Introduceti numarul de triplete:
3
Introduceti tripletul {} de forma m b r: "
2 3 1
3 5 4
4 6 0
Datele de ieșire
Datele sunt introduse corect.
10
104
1002


Rezolvare

#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("Datele nu corespund restricțiilor impuse.")
        else:
            print("Datele sunt introduse corect.")
            print(gaseste_numar(m, b, r))

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