폼에 텍스트 박스(좀크게, 멀티라인 = 트루), 커맨드 버튼 한개 올려놓으신후 다음 코딩을 붙여넣습니다.
Option Explicit: DefObj A-Z
Private Sub Command1_Click()
Dim Dest$
Call LS_Combine(3, "", "ABCD", Dest$)
text1.text = Dest$
End Sub
Private Sub LS_Combine(SampleSize%, RootIn$, FullSetIn$, Dest$)
Dim L9%, Root$
' --- At bottom - take result and exit
If SampleSize = 0 Then
Dest$ = Dest$ + RootIn$ + vbCrLf
Exit Sub
End If
' --- For each possible Start Letter
For L9 = 1 To Len(FullSetIn$) - SampleSize + 1
' --- Build Root
Root$ = RootIn$ + Mid$(FullSetIn$, L9, 1)
' --- Handle Residue
Call LS_Combine(SampleSize% - 1, _
Root$, _
Mid$(FullSetIn$, L9 + 1), _
Dest$)
Next
End Sub
위 코딩을 붙여넣으신후 실행을 해서 버튼을 누르면 결과가 텍스트박스에 들어갑니다.
뭐냐하면
ABCDE 라는 문자열이 있을때 저 5글자에서 3글자로 조합할수 있는방법이 순열과 조합이라는 두가지 방법이 있습니다.
순열은
ABC, BCD, CDE 같이 3개씩 조합을 하는데 ABC 와 ACB, BCA, CAB 등 같은 문자가 중복되었지만 순서만 틀리면
다르다고 판단 무조껀 숫자를 세는것이 순열입니다.
하지만 조합은 순열과는 틀리게 중복되는 문자열 집합은 허용하지 않습니다.
ABC 와 ACB, BCA, CAB 등은 무조껀 1건으로 본다는 것이죠.
따라서 항상 조합 보다는 순열이 결과값이 많습니다.
로또의 경우가 조합을 사용하는건데요.
45개의 숫자를 조합으로 만들면 8백만건 이상이 나온다죠.
예를 들어, 내가 로또를 1,2,3,4,5,6 을 찍었는데 당첨번호가 6,5,4,3,2,1 이 나와도
제가 1등에 당첨될수 있는것이 바로 조합입니다.
위 코딩은 순열과 조합중에 조합을 어떻게 만드는지를 보여주는 코딩입니다.
조합이 총 몇건이 나오는지는 웹에 많이 돌아다니는데
이 소스처럼 목록이 직접 나오는건 찾기 힘들더군요.
도움이 되셨으면 합니다.
순열(permutation, permutations), 조합(Combination, Combinations) 등으로 이 게시물을 찾을 수 있습니다.
첫댓글 감사합니다
감사합니다
감사합니다
감사합니다
잘봣습니다
잘봣습니다