2620 – FNext Number

From Bitnami MediaWiki

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 sau False î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ția exit().
  • Funcția next_number(n) primește un număr natural n și calculează 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 interiorul funcției next_number(n) se numără numărul de biți de 1 din reprezentarea în baza 2 a lui n prin utilizarea funcției bin(n), care transformă numărul n î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 metodei count('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 lui n, se returnează acest număr.
  • În programul principal se primește numărul n de la utilizator prin intermediul funcției input() și se verifică dacă acesta este un număr natural nenul prin apelul funcției verificare_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 și n prin apelul funcției next_number(int(n)), care primește numărul n sub forma unui întreg. Rezultatul este afișat prin intermediul funcției print().