Перебор сочетаний

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Перебор сочетаний

Сообщение Lunatic » 04.09.2009 (Пт) 18:20

Как реализовать перебор всех возомжных комбинаций для лотореи.
К примеру 6 из 45 (последовательность не играет роли)

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Перебор сочетаний

Сообщение MIT » 04.09.2009 (Пт) 18:43

Не то, случайно?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Перебор сочетаний

Сообщение Lunatic » 04.09.2009 (Пт) 18:57

Не совсем. Там с повторениями. Вроде
Код: Выделить всё
001
002
003
...
999

А мне нужно
Код: Выделить всё
012
013
...
789

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Перебор сочетаний

Сообщение Mikle » 04.09.2009 (Пт) 19:09

Код: Выделить всё
Option Explicit

Dim StrIn As String

Sub Main()
  StrIn = "123"
  NextWord "", 1
End Sub

Sub NextWord(s As String, p As Integer)
Dim n As Integer
  If p > Len(StrIn) Then
    Debug.Print s
  Else
    For n = 0 To Len(s)
      NextWord Left(s, n) + Mid(StrIn, p, 1) + Right(s, Len(s) - n), p + 1
    Next n
  End If
End Sub

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Перебор сочетаний

Сообщение Lunatic » 04.09.2009 (Пт) 19:25

Это уже ближе. Но тут перестановка в пределах строки. А мне нужен диапазон от 0 до 255 к примеру. Тоесть найти все комбинации из трёх неповторяющихся байт.
Притом
Код: Выделить всё
321
231
213
312
132
123

Это одна комбинация чисел 1, 2 и 3. Последовательность в моём случае не играет роли

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Перебор сочетаний

Сообщение Mikle » 04.09.2009 (Пт) 19:30

Lunatic писал(а):тут перестановка в пределах строки

Вместо строки подставь массив. Я просто дал пример, что такие задачи решаются рекурсивно.

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Re: Перебор сочетаний

Сообщение Lunatic » 05.09.2009 (Сб) 17:40

Кто знает что такое "полные системы" для игры в лоторею, так вот. Именно это мне и нужно. Сам алгоритм расчёта всех вариантов полной системы

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Перебор сочетаний

Сообщение Mikle » 07.09.2009 (Пн) 12:09

Код: Выделить всё
Option Explicit

Dim Ar() As Long

'Лотерея lMin из lMax (3 из 5)
Const lMin = 3
Const lMax = 5

Sub Main()
  ReDim Ar(1 To lMin)
  Lot lMin, lMax
End Sub

Sub Lot(ByVal Min As Long, ByVal Max As Long)
  Dim n As Long, k As Long
  For n = Min To Max
    Ar(Min) = n
    If Min > 1 Then
      Lot Min - 1, n - 1
    Else
      For k = 1 To lMin
        Debug.Print Ar(k),
      Next k
      Debug.Print
    End If
  Next n
End Sub

Самому подумать... :(


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 95

    TopList