В промежутке от A до B найти числа, в записи которых в двоичной системе ровно K единиц - VB

Узнай цену своей работы

Формулировка задачи:

Помогите найти оптимальный алгоритм решения:

Условие:

В числах от A до B включительно найти числа, в которых, в записи их в двоичной системе ровно K единиц Допустим при A = 10, B = 20, K = 2, чисел таких будет 5 штук. 10=10102; 12=11002; 17=100012; 20=101002 Вот вобщем то задачка, но ее нельзя делать перебором всех чисел, так как времени это займет слишком много... Уважаемые знатоки, подскажите оптимальный алгоритм для этого)

Решение задачи: «В промежутке от A до B найти числа, в записи которых в двоичной системе ровно K единиц»

textual
Листинг программы
Function Fl1(a&, b&, k&)
Dim i&, j&, m&, n&
    'a - начало диапазона
    'b - конец диапазона
    'k - число единиц в двоичном представлении
    'i - счетчик цикла от a до b
    'j - переменная для перевода i в двоичное
    'm - счетчик чисел
    'n - счетчик единиц
'Dim t!: t = Timer
'a = 10: b = 20: k = 2
'a = 0: b = 1000000: k = 2
For i = a To b
    j = i
    n = 0
    While j
        If j Mod 2 Then n = n + 1: If n > k Then GoTo nxt_num
        j = j \ 2
    Wend
    If n = k Then m = m + 1
nxt_num:
Fl1 = m
Next
'Debug.Print m, Timer - t
End Function
 
Sub test()
Const L& = 1000000
Dim a&, b&, i&, j&, k&, m&, n&
 
Do
    a = Rnd * L \ 2
    b = a + Rnd * (L - a)
    k = 1 + Int(Rnd * 10)
    i = Fl1(a, b, k)
    j = Flaker(a, b, k)
    Debug.Print a, b, k, i, j
    If i <> j Then Stop
Loop
    
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы