Страница: 1 |
Если тебе очень нужен хороший код, то подожди денёк и я тебе его выдру из своего DekoderX(g--k.newmail.ru) Павел, если честно , то я там нечего не понял, а коды скопировал код в слепую у меня просто вылетела система ( The One, Жду не дождусь........ у тебя в строке Private Sub RazmSochGenerate () Всего ведь 4 числа надо выбрать! Это можно сделать и не используя разные комбинаторные заморочки. Берешь четыре вложенные цикла с интервалами соответственно n, n-1, n-2, n-3, после чего прибавляешь к каждому из этих индексов столько, чтобы полученный индекс был больше стольких же других... и всё-равно глухо, в строке Swap Out(k + 1), Out(i) вылетает Subscript out of range.... при N = 100 и K=4 Страница: 1 |
Вопрос: вопрос к кодерам и математикам одновременно
Добавлено: 18.12.03 23:47
Автор вопроса: ZoomerSD | ICQ: 148640473
вот представьте себе такую ситуацию, есть последовательность чисел (1,2,3,4,5,....) от где N - число элементов этой прогрессии, и 4<=N<=100. Нужно программно составить список всех возможных комбинаций, по четыре элемента, они могут-быть как 1,2,3,4 так и 3,9,5,90 Помогите......
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
NeForm@t
ICQ: 252999255
Вопросов: 36
Ответов: 247
Web-сайт:
Профиль | | #1
Добавлено: 18.12.03 23:53
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 19.12.03 08:00
Посмотри мою статью "Комбинаторика и переборные алгоритмы". Статья,
честно говоря, хреновая, но такой код там вроде был...
Номер ответа: 3
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #3
Добавлено: 19.12.03 23:57
Номер ответа: 4
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #4
Добавлено: 20.12.03 05:26
Вот это работает?
Dim X () As Integer
Dim Counter () As Integer
Dim Out() As Integer
Dim K As Integer
Dim N As Integer
Private Sub Razm ()
Dim i As Integer
N = CInt(InputBox("Введите N"))
K = CInt(InputBox("Введите K"))
K = K + 1
ReDim X(N)
ReDim Out(K)
For i = 1 To N
X(i) = i
Next
txtOut.Text = ""
ReDim Counter(K)
Counter(0) = 1
RazmSochGenerate 1
End Sub
Private Sub RazmSochGenerate ()
Dim i As Integer
Dim j As Integer
Dim n1 As Integer
Dim X1() As Integer
If c = K Then
X1 = X
For i = 1 To K - 1
n1 = 0
For j = 1 To N
If X1(j) <> 0 Then n1 = n1 + 1
If n1 = Counter(i) Then
Out(i) = X1(j)
X1(j) = 0
Exit For
End If
Next
Next
PRGenerate 0
Else
For Counter(c) = Counter(c - 1) To N - c + 1
RazmSochGenerate c + 1
Next
End If
End Sub
Private Sub PRGenerate (ByVal k As Integer)
Dim i As Integer
If k = N Then
For i = 1 To N
txtOut.Text = txtOut.Text & CStr (Out (i))
Next
txtOut.Text = txtOut.Text & vbCrLf
Else
For i = k + 1 To N
Swap Out (k + 1), Out (i)
PRGenerate k + 1
Swap Out (k + 1), Out (i)
Next
End If
End Sub
Private Sub Swap (ByRef a As Integer, ByRef b As Integer)
Dim c As Integer
c = a
a = b
b = c
End Sub
Номер ответа: 5
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #5
Добавлено: 20.12.03 17:24
аругменты не указаны....
Номер ответа: 6
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #6
Добавлено: 20.12.03 20:51
Гм.. Точно! Там один аргумент: ByVal c As Integer.
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 20.12.03 23:08
Номер ответа: 8
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #8
Добавлено: 20.12.03 23:08