3977 - Expo N: Difference between revisions
Dragos1234 (talk | contribs) |
Dragos1234 (talk | contribs) |
||
(19 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Sursa: [https://www.pbinfo.ro/probleme/3977/expon] | Sursa: [https://www.pbinfo.ro/probleme/3977/expon] | ||
== Cerinţa == | == Cerinţa == | ||
Se citește numărul natural '''n'''. Să se determine exponentul maxim e cu proprietatea că '''2 | Se citește numărul natural '''n'''. Să se determine exponentul maxim e cu proprietatea că '''2<sup>e''' ≤ '''n'''. | ||
== Date de intrare == | == Date de intrare == | ||
Line 7: | Line 7: | ||
== Date de ieșire == | == Date de ieșire == | ||
Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele introduse corespund cerintelor", apoi pe un rând nou va afișa valoarea exponentului maxim. În caz contrar, se va afișa mesajul:" Datele introduse nu corespund cerintelor." | |||
== Restricţii şi precizări == | == Restricţii şi precizări == | ||
Line 14: | Line 14: | ||
== Exemplul 1 == | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
: | : Introduceți numărul n: 40 | ||
; Ieșire | ; Ieșire | ||
: Datele corespund | : Datele introduse corespund cerintelor. | ||
: | : 5 | ||
<br> | <br> | ||
== Exemplul 2 == | == Exemplul 2 == | ||
; Intrare | ; Intrare | ||
: | : Introduceți numărul n: 20000000000000000000000000000 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse nu corespund | : Datele introduse nu corespund cerintelor. | ||
<br> | <br> | ||
Line 37: | Line 30: | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#3977 | #3977 | ||
def validare(n): | |||
return 1 <= n <= 2000000000 | |||
def exponent_maxim(n): | def exponent_maxim(n): | ||
e = 0 | e = 0 | ||
Line 46: | Line 43: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
n = int(input("Introduceți numărul n: ")) | n = int(input("Introduceți numărul n: ")) | ||
print(" | if validare(n) is True: | ||
print(f"Datele introduse corespund cerintelor\n{exponent_maxim(n)}") | |||
else: | |||
print("Datele introduse nu corespund cerintelor.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicatie rezolvare== | |||
Acest program primește un număr întreg de la utilizator și verifică dacă se încadrează între 1 și 2 miliarde. Dacă numărul este valid, programul determină cel mai mare exponent al lui 2 care nu depășește numărul dat. Aceasta se realizează prin creșterea exponentului e începând cu 0 până când 2^e depășește numărul dat și apoi returnând e-1 (deoarece e a fost deja incrementat cu 1 în ultima iterație în care 2^e depășește numărul dat). | |||
Dacă numărul dat nu este valid, programul afișează un mesaj corespunzător. |
Latest revision as of 23:03, 11 May 2023
Sursa: [1]
Cerinţa[edit | edit source]
Se citește numărul natural n. Să se determine exponentul maxim e cu proprietatea că 2e ≤ n.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele introduse corespund cerintelor", apoi pe un rând nou va afișa valoarea exponentului maxim. În caz contrar, se va afișa mesajul:" Datele introduse nu corespund cerintelor."
Restricţii şi precizări[edit | edit source]
- 1 ⩽ n ⩽ 2.000.000.000
Exemplul 1[edit | edit source]
- Intrare
- Introduceți numărul n: 40
- Ieșire
- Datele introduse corespund cerintelor.
- 5
Exemplul 2[edit | edit source]
- Intrare
- Introduceți numărul n: 20000000000000000000000000000
- Ieșire
- Datele introduse nu corespund cerintelor.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 3977
def validare(n):
return 1 <= n <= 2000000000
def exponent_maxim(n):
e = 0 while 2**e <= n: e += 1 return e-1
if __name__ == '__main__':
n = int(input("Introduceți numărul n: ")) if validare(n) is True: print(f"Datele introduse corespund cerintelor\n{exponent_maxim(n)}") else: print("Datele introduse nu corespund cerintelor.")
</syntaxhighlight>
Explicatie rezolvare[edit | edit source]
Acest program primește un număr întreg de la utilizator și verifică dacă se încadrează între 1 și 2 miliarde. Dacă numărul este valid, programul determină cel mai mare exponent al lui 2 care nu depășește numărul dat. Aceasta se realizează prin creșterea exponentului e începând cu 0 până când 2^e depășește numărul dat și apoi returnând e-1 (deoarece e a fost deja incrementat cu 1 în ultima iterație în care 2^e depășește numărul dat).
Dacă numărul dat nu este valid, programul afișează un mesaj corespunzător.