3590 - Bit Distance: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: <nowiki>== Cerință ==</nowiki> Se dă un număr natural <code>n</code>. Considerând reprezentarea in baza <code>2</code> a acestui număr, calculați distanța dintre primul bit setat și ultimul bit setat. Distanța dintre <code>2</code> biți este egală cu numărul de biți aflați intre biții respectivi. <nowiki>== Date de intrare ==</nowiki> Programul citește de la tastatură numărul <code>n</code>. <nowiki>== Date de ieșire ==</nowiki> Programul va afișa pe...
 
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<nowiki>== Cerință ==</nowiki>
== Cerință ==
Se dă un număr natural '''n'''. Considerând reprezentarea in baza 2 a acestui număr, calculați distanța dintre primul bit setat și ultimul bit setat. Distanța dintre 2 biți este egală cu numărul de biți aflați intre biții respectivi.
== 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 de intrare corespund restricțiilor impuse." Programul va afișa pe ecran distanța dintre primul și ultimul bit setat al numărului citit. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."


Se dă un număr natural <code>n</code>. Considerând reprezentarea in baza <code>2</code> a acestui număr, calculați distanța dintre primul bit setat și ultimul bit setat. Distanța dintre <code>2</code> biți este egală cu numărul de biți aflați intre biții respectivi.
== Restricții de precizări ==
*1 &les; n &les; 2^64
== Exemplul 1==
; Intrare
: 82
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 6
== Exemplul 2 ==
; Intrare
: 4
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 1
== Rezolvare ver. 1 ==
<syntaxhighlight lang="python" line="1" start="1">
def validare(n):
    return n.isdigit() and 1 <= int(n) <= pow(2, 64)


<nowiki>== Date de intrare ==</nowiki>


Programul citește de la tastatură numărul <code>n</code>.
def bit_distance(n):
    # Teoretic, primul bit este întotdeauna 1. Dacă mutăm toți biții la dreapta până când rămâne numărul 0b000001,
    # vom afla distanța cerută.
    distanta = 1


<nowiki>== Date de ieșire ==</nowiki>
    if n == 0:
        distanta = 0
    else:
        # Întâi, mutăm biții la dreapta până când vom avea un 1 la final
        while not (n & 0b001):
            n >>= 1
        # Acum, mutăm biții la dreapta până când rămâne numărul 1, adică până când ajungem la primul bit setat
        while n != 1:
            n >>= 1
            distanta += 1
    return distanta


Programul va afișa pe ecran distanța dintre primul și ultimul bit setat al numărului citit.


<nowiki>== Restricții de precizări ==</nowiki>
if __name__ == "__main__":
    n = input("Introduceti n: ")
    if validare(n):
        n = int(n)
        # Se afișează distanța calculată
        print("Datele introduse corespund restricțiilor impuse.")
        print("Distanța cerută este:", bit_distance(n))


<nowiki>*</nowiki>1 <nowiki>&</nowiki>les; n <nowiki>&</nowiki>les; 2^64
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")


<nowiki>== Exemplul 1==</nowiki>
</syntaxhighlight>
 
<nowiki>;</nowiki> Intrare
 
<nowiki>:</nowiki> 82
 
<nowiki>;</nowiki> Ieșire
 
<nowiki>:</nowiki> Datele introduse corespund restricțiilor impuse.
 
<nowiki>:</nowiki> 6
 
<nowiki><br></nowiki>
 
<nowiki>== Exemplul 2 ==</nowiki>
 
<nowiki>;</nowiki> Intrare
 
<nowiki>:</nowiki> 4
 
<nowiki>;</nowiki> Ieșire
 
<nowiki>:</nowiki> Datele introduse corespund restricțiilor impuse.
 
<nowiki>:</nowiki> 1
 
<nowiki><br></nowiki>
 
<nowiki>== Rezolvare ver. 1 ==</nowiki>

Latest revision as of 11:58, 30 April 2023

Cerință[edit | edit source]

Se dă un număr natural n. Considerând reprezentarea in baza 2 a acestui număr, calculați distanța dintre primul bit setat și ultimul bit setat. Distanța dintre 2 biți este egală cu numărul de biți aflați intre biții respectivi.

Date de intrare[edit | edit source]

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

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa pe ecran distanța dintre primul și ultimul bit setat al numărului citit. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări[edit | edit source]

  • 1 ⩽ n ⩽ 2^64

Exemplul 1[edit | edit source]

Intrare
82
Ieșire
Datele introduse corespund restricțiilor impuse.
6

Exemplul 2[edit | edit source]

Intrare
4
Ieșire
Datele introduse corespund restricțiilor impuse.
1

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1"> def validare(n):

   return n.isdigit() and 1 <= int(n) <= pow(2, 64)


def bit_distance(n):

   # Teoretic, primul bit este întotdeauna 1. Dacă mutăm toți biții la dreapta până când rămâne numărul 0b000001,
   # vom afla distanța cerută.
   distanta = 1
   if n == 0:
       distanta = 0
   else:
       # Întâi, mutăm biții la dreapta până când vom avea un 1 la final
       while not (n & 0b001):
           n >>= 1
       # Acum, mutăm biții la dreapta până când rămâne numărul 1, adică până când ajungem la primul bit setat
       while n != 1:
           n >>= 1
           distanta += 1
   return distanta


if __name__ == "__main__":

   n = input("Introduceti n: ")
   if validare(n):
       n = int(n)
       # Se afișează distanța calculată
       print("Datele introduse corespund restricțiilor impuse.")
       print("Distanța cerută este:", bit_distance(n))
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")

</syntaxhighlight>