Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: g--k.newmail.ru
 Профиль | | #1
Добавлено: 18.12.03 23:53

Если тебе очень нужен хороший код, то подожди денёк и я тебе его выдру из своего DekoderX(g--k.newmail.ru)

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 19.12.03 08:00
Посмотри мою статью "Комбинаторика и переборные алгоритмы". Статья,
честно говоря, хреновая, но такой код там вроде был...

Ответить

Номер ответа: 3
Автор ответа:
 ZoomerSD



ICQ: 148640473 

Вопросов: 135
Ответов: 270
 Профиль | | #3 Добавлено: 19.12.03 23:57

Павел, если честно , то я там нечего не понял, а коды скопировал код в слепую у меня просто вылетела система :((

The One, Жду не дождусь........

Ответить

Номер ответа: 4
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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

у тебя в строке Private Sub RazmSochGenerate ()
аругменты не указаны....

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 20.12.03 20:51
Гм.. Точно! Там один аргумент: ByVal c As Integer.

Ответить

Номер ответа: 7
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 20.12.03 23:08

Всего ведь 4 числа надо выбрать! Это можно сделать и не используя разные комбинаторные заморочки. Берешь четыре вложенные цикла с интервалами соответственно n, n-1, n-2, n-3, после чего прибавляешь к каждому из этих индексов столько, чтобы полученный индекс был больше стольких же других...

Ответить

Номер ответа: 8
Автор ответа:
 ZoomerSD



ICQ: 148640473 

Вопросов: 135
Ответов: 270
 Профиль | | #8 Добавлено: 20.12.03 23:08

и всё-равно глухо, в строке

Swap Out(k + 1), Out(i)

вылетает Subscript out of range.... при N = 100 и K=4

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам