3977 - Expo N: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Dragos1234 (talk | contribs)
 
(18 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^e ≤ n'''.
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 ==  
Acest program calculează exponentul maxim al unei puteri a lui 2 care este mai mic sau egal cu numărul n introdus de utilizator.
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."
 
Datele de ieșire pentru acest program sunt un mesaj afișat pe ecran care indică exponentul maxim calculat pentru numărul n introdus de utilizator. Mesajul afișat va fi de forma: "Exponentul maxim este: X", unde X va fi valoarea calculată pentru exponentul maxim al lui 2 care este mai mic sau egal cu n.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Line 16: Line 14:
== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
: 4
: Introduceți numărul n: 40
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele introduse corespund cerintelor.  
: 576
: 5
<br>
<br>


== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: 16
: Introduceți numărul n: 20000000000000000000000000000
; Ieșire
: Datele introduse nu corespund cerințelor.
<br>
== Exemplul 3 ==
; Intrare
: 7
; Ieșire
; Ieșire
: Datele corespund cerințelor.
: Datele introduse nu corespund cerintelor.
: 25401600
<br>
<br>


Line 39: 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 48: 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("Exponentul maxim este:", exponent_maxim(n))
     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ă 2en.

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>

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