2620 – FNext Number
Sursa: FNext Number
Cerinţă[edit | edit source]
Se primește ca parametru un număr natural nenul n
și returnează cel mai mic număr natural, strict mai mare decât n
, care are în reprezentarea în baza 2
același număr de biți de 1
ca și n
.
Date de intrare[edit | edit source]
Programul va citi de la tastatură valoarean.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte!", apoi va afișa cel mai mic număr natural, strict mai mare decât n
, care are în reprezentarea în baza 2
același număr de biți de 1
ca și n
. În cazul în care datele nu respectă restricțiile, se va afișa mesajul "Datele introduse nu sunt corecte!".
Restricţii şi precizări[edit | edit source]
- n > 0
Exemple[edit | edit source]
Exemplul 1[edit | edit source]
- Intrare
- Introduceti numarul: 30
- Ieșire
- Datele introduse sunt corecte!
- 39
Exemplul 2[edit | edit source]
- Intrare
- Introduceti numarul: 456
- Ieșire
- Datele introduse sunt corecte!
- 464
Exemplul 3[edit | edit source]
- Intrare
- Introduceti numarul: -5
- Ieșire
- Datele introduse sunt incorecte!
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1"> def is_integer(value):
return value.isdigit()
def verificare_nr(n):
if is_integer(n): if 0 < int(n): return n else: print("Datele introduse sunt incorecte!") exit() else: print("Datele introduse sunt incorecte!") exit()
def next_number(n: int) -> int:
numar_de_biti_de_1 = bin(n).count('1') while True: n += 1 if bin(n).count('1') == numar_de_biti_de_1: return n
if __name__ == '__main__':
n = input("Introduceti numarul: ") verificare_nr(n) print("Datele introduse sunt corecte!") print(next_number(int(n)))
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
- Funcția
is_integer(value)
verifică dacă un șir de caractere reprezintă un număr întreg pozitiv și returneazăTrue
sauFalse
în funcție de acest lucru. - Funcția
verificare_nr(n)
verifică dacă numărul primit ca parametru este un număr natural nenul și îl returnează dacă este corect, altfel afișează un mesaj de eroare și încheie programul cu funcțiaexit()
. - Funcția
next_number(n)
primește un număr naturaln
și calculează cel mai mic număr natural, strict mai mare decâtn
, care are în reprezentarea în baza 2 același număr de biți de 1 ca șin
. - În interiorul funcției
next_number(n)
se numără numărul de biți de 1 din reprezentarea în baza 2 a luin
prin utilizarea funcțieibin(n)
, care transformă număruln
în reprezentarea sa în baza 2 sub formă de șir de caractere, și apoi numărând câte biți de 1 conține acest șir de caractere prin utilizarea metodeicount('1')
. - Folosind un ciclu infinit, se verifică fiecare număr natural, începând de la
n + 1
, prin incrementarea lui cu 1 în fiecare iterație și numărarea numărului de biți de 1 din reprezentarea sa în baza 2. Dacă numărul de biți de 1 din reprezentarea în baza 2 a numărului verificat este egal cu cel al luin
, se returnează acest număr. - În programul principal se primește numărul
n
de la utilizator prin intermediul funcțieiinput()
și se verifică dacă acesta este un număr natural nenul prin apelul funcțieiverificare_nr(n)
. Dacă acesta este corect, se afișează mesajul "Datele introduse sunt corecte!" și se calculează cel mai mic număr natural care are în reprezentarea în baza 2 același număr de biți de 1 ca șin
prin apelul funcțieinext_number(int(n))
, care primește număruln
sub forma unui întreg. Rezultatul este afișat prin intermediul funcțieiprint()
.