0254 - Puteri: Difference between revisions
Paul Ungur (talk | contribs) Pagină nouă: ==Cerinţa== Se dau <span style=“color: red”> n</span> perechi de numere naturale <span style=“color: red”> a</span>, <span style=“color: red”> b</span>. Să se determine pentru fiecare pereche, dacă există, cea mai mare putere a lui <span style=“color: red”> 2</span> din intervalul închis determinat de <span style=“color: red”> a</span> şi <span style=“color: red”> b</span>. ==Date de intrare== Programul citeşte de la tastatură numărul <span s... |
Paul Ungur (talk | contribs) No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
==Date de ieşire== | ==Date de ieşire== | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Date de intrare valide."''', apoi programul va afişa pe câte o linie ecranului, pentru fiecare interval dat, cea mai mare putere a lui <span style=“color: red”> 2</span> din interval, sau <span style=“color: red”> 0</span>, dacă intervalul nu conţine nici o putere al lui <span style=“color: red”> 2</span>. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Date de intrare invalide".''' | |||
==Restricţii şi precizări== | ==Restricţii şi precizări== | ||
Line 15: | Line 15: | ||
==Exemplu:== | ==Exemplu:== | ||
Date de intrare | Date de intrare | ||
3 | : 3 | ||
2 69 | : 2 69 | ||
20 10 | : 20 10 | ||
19 25 | : 19 25 | ||
Date de ieşire | Date de ieşire | ||
64 | : Date de intrare valide | ||
16 | : 64 | ||
0 | : 16 | ||
: 0 | |||
==Rezolvare== | ==Rezolvare== | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def | def validare(n, a, b): | ||
for i in range(n): | |||
if not (1 <= n <= 10_000): | |||
return False | |||
if not (0 <= a[i] < 1_000_000_000 and 0 <= b[i] < 1_000_000_000): | |||
return False | |||
return True | return True | ||
def | def puteri(n, a, b): | ||
for i in range(n): | for i in range(n): | ||
p = 1 | |||
while p * 2 <= max(b[i], a[i]): | |||
p = p * 2 | |||
if p >= min(a[i], b[i]): | |||
print(p) | |||
else: | |||
print(0) | |||
if __name__ == '__main__': | |||
n = int(input()) | |||
a, b = [], [] | |||
for i in range(n): | |||
ai, bi = map(int, input().split()) | |||
a.append(ai) | |||
b.append(bi) | |||
if validare(n, a, b): | |||
print("Date de intrare valide") | |||
puteri(n, a, b) | |||
else: | else: | ||
print("Date de intrare invalide") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatie cod:== | |||
==Explicatie== | Funcția validare(n, a, b) primește trei parametri: n de tip întreg, a și b liste de numere întregi. Funcția parcurge fiecare element din listele a și b și verifică dacă n este în intervalul [1, 10000], iar valorile din listele a și b sunt în intervalul [0, 999999999]. Dacă toate aceste condiții sunt îndeplinite pentru fiecare pereche de numere, funcția returnează True, altfel returnează False. | ||
Funcția puteri(n, a, b) primește trei parametri: n de tip întreg și a și b liste de numere întregi. Funcția parcurge fiecare element din listele a și b și calculează cea mai mare putere a lui 2 (p) care este mai mică sau egală cu maximul dintre cele două numere. Apoi, verifică dacă p este mai mare sau egal cu minimul dintre cele două numere. În funcție de această verificare, se afișează p sau 0. | |||
În blocul if __name__ == '__main__':, se citește n de la intrarea standard și se inițializează listele goale a și b. Se citește perechea de numere ai și bi de n ori și se adaugă valorile în listele corespunzătoare. Se validează datele de intrare utilizând funcția validare(n, a, b). Dacă datele de intrare sunt valide, se afișează un mesaj de confirmare, se apelează funcția puteri(n, a, b) și se afișează rezultatele. Altfel, se afișează un mesaj de eroare. | |||
Funcția | Codul primește datele de intrare de la utilizator, validează datele și efectuează operațiile specifice pentru a determina și afișa rezultatele. | ||
n | |||
fiecare element din | |||
Funcția | |||
Latest revision as of 19:05, 29 June 2023
Cerinţa[edit | edit source]
Se dau n perechi de numere naturale a, b. Să se determine pentru fiecare pereche, dacă există, cea mai mare putere a lui 2 din intervalul închis determinat de a şi b.
Date de intrare[edit | edit source]
Programul citeşte de la tastatură numărul n, apoi n perechi de numere a, b.
Date de ieşire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi programul va afişa pe câte o linie ecranului, pentru fiecare interval dat, cea mai mare putere a lui 2 din interval, sau 0, dacă intervalul nu conţine nici o putere al lui 2. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".
Restricţii şi precizări[edit | edit source]
1 ≤ n ≤ 10000 fiecare dintre numerele a şi b au cel mult 9 cifre. intervalele sunt închise
Exemplu:[edit | edit source]
Date de intrare
- 3
- 2 69
- 20 10
- 19 25
Date de ieşire
- Date de intrare valide
- 64
- 16
- 0
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> def validare(n, a, b):
for i in range(n): if not (1 <= n <= 10_000): return False if not (0 <= a[i] < 1_000_000_000 and 0 <= b[i] < 1_000_000_000): return False return True
def puteri(n, a, b):
for i in range(n): p = 1 while p * 2 <= max(b[i], a[i]): p = p * 2 if p >= min(a[i], b[i]): print(p) else: print(0)
if __name__ == '__main__':
n = int(input()) a, b = [], [] for i in range(n): ai, bi = map(int, input().split()) a.append(ai) b.append(bi)
if validare(n, a, b): print("Date de intrare valide") puteri(n, a, b) else: print("Date de intrare invalide")
</syntaxhighlight>
Explicatie cod:[edit | edit source]
Funcția validare(n, a, b) primește trei parametri: n de tip întreg, a și b liste de numere întregi. Funcția parcurge fiecare element din listele a și b și verifică dacă n este în intervalul [1, 10000], iar valorile din listele a și b sunt în intervalul [0, 999999999]. Dacă toate aceste condiții sunt îndeplinite pentru fiecare pereche de numere, funcția returnează True, altfel returnează False. Funcția puteri(n, a, b) primește trei parametri: n de tip întreg și a și b liste de numere întregi. Funcția parcurge fiecare element din listele a și b și calculează cea mai mare putere a lui 2 (p) care este mai mică sau egală cu maximul dintre cele două numere. Apoi, verifică dacă p este mai mare sau egal cu minimul dintre cele două numere. În funcție de această verificare, se afișează p sau 0. În blocul if __name__ == '__main__':, se citește n de la intrarea standard și se inițializează listele goale a și b. Se citește perechea de numere ai și bi de n ori și se adaugă valorile în listele corespunzătoare. Se validează datele de intrare utilizând funcția validare(n, a, b). Dacă datele de intrare sunt valide, se afișează un mesaj de confirmare, se apelează funcția puteri(n, a, b) și se afișează rezultatele. Altfel, se afișează un mesaj de eroare. Codul primește datele de intrare de la utilizator, validează datele și efectuează operațiile specifice pentru a determina și afișa rezultatele.