1910 - Numar Minim 0: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
Line 54: | Line 54: | ||
n = int(input("Introduceti numarul de triplete: ")) | n = int(input("Introduceti numarul de triplete: ")) | ||
for i in range(n): | for i in range(n): | ||
m, b, r = map(int, input("Introduceti tripletul {} de forma | m, b, r = map(int, input("Introduceti tripletul {} de forma b r: ".format(i+1)).split()) | ||
if not validate_input(m, b, r): | if not validate_input(m, b, r): | ||
print("Datele nu corespund restricțiilor impuse.") | print("Datele nu corespund restricțiilor impuse.") |
Revision as of 21:56, 27 April 2023
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 n_cifre , care împărţit la m_cifre dă restul rest.
În caz contrar, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse."
Restricţii şi precizări
1 ≤ n ≤ 10
1 ≤ n_cifre ≤ 100.000
2 ≤ m_cifre ≤ 10
0 ≤ rest < b
Exemplul 1
- Datele de intrare
- Introduceti numarul de triplete:
- 3
- Introduceti tripletul {} de forma n_cifre m_cifre rest: "
- 2 3 1
- 3 5 4
- 4 6 0
- Datele de ieșire
- Datele sunt introduse corect.
- 10
- 104
- 1002
Rezolvare
<syntaxhighlight lang="python" line>
- 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 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))
</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ă.