В промежутке от 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д