2620 – FNext Number
Sursa: FNext Number
Cerinţă
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
Programul va citi de la tastatură valoarean.
Date de ieșire
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
- n > 0
Exemple
Exemplul 1
- Intrare
- Introduceti numarul: 30
- Ieșire
- Datele introduse sunt corecte!
- 39
Exemplul 2
- Intrare
- Introduceti numarul: 456
- Ieșire
- Datele introduse sunt corecte!
- 464
Exemplul 3
- Intrare
- Introduceti numarul: -5
- Ieșire
- Datele introduse sunt incorecte!
Rezolvare
<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
- Funcția
is_integer(value)verifică dacă un șir de caractere reprezintă un număr întreg pozitiv și returneazăTruesauFalseî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 luinprin 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
nde 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 șinprin apelul funcțieinext_number(int(n)), care primește numărulnsub forma unui întreg. Rezultatul este afișat prin intermediul funcțieiprint().