1910 - Numar Minim 0: Difference between revisions
Sinn Erich (talk | contribs) |
Sinn Erich (talk | contribs) |
||
(18 intermediate revisions by the same user not shown) | |||
Line 1: | Line 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 ''' | Georgiana a mai primit o problemă de la doamna profesor. Se dau '''n''' triplete de forma '''primul_nr, al_doilea_nr, rest,''' iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu '''primul_nr''' , care împărţit la '''al_doilea_nr''' dă restul '''rest'''. | ||
== Date de intrare == | == Date de intrare == | ||
Line 10: | Line 10: | ||
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ă care este cel mai mic număr natural format cu n_cifre , care împărţit la m_cifre dă restul rest. | ||
Î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 == | ||
1 ≤ '''n''' ≤ 10 | 1 ≤ '''n''' ≤ 10 | ||
1 ≤ ''' | 1 ≤ '''primul_nr''' ≤ 100.000 | ||
2 ≤ ''' | 2 ≤ '''al_doilea_nr''' ≤ 10 | ||
0 ≤ ''' | 0 ≤ '''rest''' < b | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; | ; Datele de intrare | ||
: 4 | : Introduceti numarul de triplete: | ||
; | : 3 | ||
: Datele | : Introduceti tripletul 1 de forma m_cifre n_cifre rest: | ||
: | : 2 3 1 | ||
:Introduceti tripletul 2 de forma m_cifre n_cifre rest: | |||
: 3 5 4 | |||
:Introduceti tripletul 3 de forma m_cifre n_cifre rest: | |||
: 4 6 0 | |||
; Datele de ieșire | |||
: Datele sunt introduse corect. | |||
: 10 | |||
: 104 | |||
: 1002 | |||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | #1910 | ||
def | def gaseste_numar(m_cifre, n_cifre, rest): | ||
for j in range(10**(m_cifre-1), 10**m_cifre): | |||
if j % n_cifre == rest: | |||
return j | |||
def validate_input(m_cifre, n_cifre, rest): | |||
if not (1 <= m_cifre <= 100000) or not (2 <= n_cifre <= 10) or not (0 <= rest < n_cifre): | |||
return False | |||
return True | |||
if __name__ == '__main__': | |||
n = int(input("Introduceti numarul de triplete: ")) | |||
for | for i in range(n): | ||
m_cifre, n_cifre, rest = map(int, input("Introduceti tripletul {} de forma m_cifre n_cifre rest: ".format(i+1)).split()) | |||
if not validate_input(m_cifre, n_cifre, rest): | |||
print("Datele nu corespund restricțiilor impuse.") | |||
else: | |||
print("Datele sunt introduse corect.") | |||
print(gaseste_numar(m_cifre, n_cifre, rest)) | |||
</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ă. |
Latest revision as of 20:00, 29 April 2023
Sursa: [1]
Cerinţa[edit | edit source]
Georgiana a mai primit o problemă de la doamna profesor. Se dau n triplete de forma primul_nr, al_doilea_nr, rest, iar pentru fiecare triplet Georgiana trebuie să afle care este cel mai mic număr natural format cu primul_nr , care împărţit la al_doilea_nr dă restul rest.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n triplete de numere naturale.
Date de ieșire[edit | edit source]
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[edit | edit source]
1 ≤ n ≤ 10
1 ≤ primul_nr ≤ 100.000
2 ≤ al_doilea_nr ≤ 10
0 ≤ rest < b
Exemplul 1[edit | edit source]
- Datele de intrare
- Introduceti numarul de triplete:
- 3
- Introduceti tripletul 1 de forma m_cifre n_cifre rest:
- 2 3 1
- Introduceti tripletul 2 de forma m_cifre n_cifre rest:
- 3 5 4
- Introduceti tripletul 3 de forma m_cifre n_cifre rest:
- 4 6 0
- Datele de ieșire
- Datele sunt introduse corect.
- 10
- 104
- 1002
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1910
def gaseste_numar(m_cifre, n_cifre, rest):
for j in range(10**(m_cifre-1), 10**m_cifre): if j % n_cifre == rest: return j
def validate_input(m_cifre, n_cifre, rest):
if not (1 <= m_cifre <= 100000) or not (2 <= n_cifre <= 10) or not (0 <= rest < n_cifre): return False return True
if __name__ == '__main__':
n = int(input("Introduceti numarul de triplete: ")) for i in range(n): m_cifre, n_cifre, rest = map(int, input("Introduceti tripletul {} de forma m_cifre n_cifre rest: ".format(i+1)).split()) if not validate_input(m_cifre, n_cifre, rest): print("Datele nu corespund restricțiilor impuse.") else: print("Datele sunt introduse corect.") print(gaseste_numar(m_cifre, n_cifre, rest))
</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ă.