3977 - Expo N: Difference between revisions

From Bitnami MediaWiki
Dragos1234 (talk | contribs)
Dragos1234 (talk | contribs)
 
(12 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 ==  
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 ==
Line 18: Line 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>


Line 25: Line 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>


Line 31: 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 40: Line 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.

Latest revision as of 23:03, 11 May 2023

Sursa: [1]

Cerinţa[edit]

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

Date de intrare[edit]

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

Date de ieșire[edit]

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]

  • 1 ⩽ n ⩽ 2.000.000.000

Exemplul 1[edit]

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


Exemplul 2[edit]

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


Rezolvare[edit]

<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]

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.