3977 - Expo N: Diferență între versiuni

De la Universitas MediaWiki
 
(Nu s-au afișat 12 versiuni intermediare efectuate de alți 2 utilizatori)
Linia 1: Linia 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 ==
Linia 7: Linia 7:


== Date de ieșire ==  
== Date de ieșire ==  
Programul calculează exponentul maxim al puterii lui 2 care este mai mic sau egal cu numărul dat de intrare.
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 singur număr întreg, reprezentând exponentul maxim calculat. În cazul în care numărul dat de intrare nu se află în intervalul '''[1, 2.000.000.000]''', programul va afișa un mesaj de eroare.


== Restricţii şi precizări ==
== Restricţii şi precizări ==
Linia 18: Linia 16:
: Introduceți numărul n: 40
: Introduceți numărul n: 40
; Ieșire
; Ieșire
: Exponentul maxim este: 5
: Datele introduse corespund cerintelor.
: 5
<br>
<br>


Linia 25: Linia 24:
: Introduceți numărul n: 20000000000000000000000000000
: Introduceți numărul n: 20000000000000000000000000000
; Ieșire
; Ieșire
: Eroare: n trebuie să fie între 1 și 2.000.000.000
: Datele introduse nu corespund cerintelor.
<br>
<br>


Linia 31: Linia 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
Linia 40: Linia 43:
if __name__ == '__main__':
if __name__ == '__main__':
     n = int(input("Introduceți numărul n: "))
     n = int(input("Introduceți numărul n: "))
     if n < 1 or n > 2000000000:
     if validare(n) is True:
         print("Eroare: n trebuie să fie între 1 și 2.000.000.000")
         print(f"Datele introduse corespund cerintelor\n{exponent_maxim(n)}")
     else:
     else:
         print("Exponentul maxim este:", exponent_maxim(n))
         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.

Versiunea curentă din 11 mai 2023 23:03

Sursa: [1]

Cerinţa

Se citește numărul natural n. Să se determine exponentul maxim e cu proprietatea că 2en.

Date de intrare

Programul citește de la tastatură numărul n.

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

  • 1 ⩽ n ⩽ 2.000.000.000

Exemplul 1

Intrare
Introduceți numărul n: 40
Ieșire
Datele introduse corespund cerintelor.
5


Exemplul 2

Intrare
Introduceți numărul n: 20000000000000000000000000000
Ieșire
Datele introduse nu corespund cerintelor.


Rezolvare

#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.")

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.