11. juli 2003 - 11:53Der er
13 kommentarer og 1 løsning
Vis ALLE de mulige kombinitationer
Jeg har kigget lidt på denne kode:
Option Explicit Dim n As Byte, p As Byte, R As String Const Tegn = "ABCDEFGHIJKLMNO" Sub Komb(ByVal pos As Byte, ByVal sum As Byte, med As Boolean, ByVal s As String) If med Then s = s & Mid(Tegn, pos, 1): sum = sum + 1 End If If sum < p And pos < n Then Komb pos + 1, sum, False, s Komb pos + 1, sum, True, s End If If sum = p Then R = R & s & " , " End Sub
Private Sub Form_Load() n = 5: p = 3 Komb 1, 0, False, "" Komb 1, 0, True, "" MsgBox R End Sub
Og den virker også fint. Men jeg vil godt have, at hvert tal/bogstav kan bruges flere gange, altså: AAA BAA CAA ABA BBA CBA osv.
Din kode (som jeg i øvrigt har lavet. (Se spørgsmål om listning af kobinationer)) skal ændres til:
Option Explicit Dim n As Byte, p As Byte, R As String Const Tegn = "ABCDEFGHIJKLMNO" Sub Komb(ByVal pos As Byte, ByVal sum As Byte, ByVal Npos As Byte, ByVal s As String) Dim i As Byte For i = 1 To Npos s = s & Mid(Tegn, pos, 1): sum = sum + 1 Next If sum < p And pos < n Then For i = 0 To p - sum Komb pos + 1, sum, i, s Next End If If sum = p Then R = R & s & " , " End Sub
Private Sub Form_Load() Dim A, q As Byte, i As Byte n = 4: p = 3 For i = 0 To p Komb 1, 0, i, "" Next MsgBox R A = Split(R, ",") q = UBound(A) MsgBox q End Sub
Hej igen nmh! Jeg prøvede at ændre det, så det istedet for 3 tegn var 8 tegn. Men så kom den med en fejmeddelese hvor der stod: Overflow Og så markerede den følgende: q = UBound(A)
Hvis du sørger for at dette ikke sker, får du pointene.
Martin Moth>Ja, men det kan let ske at listen bliver så lang, at den et heltal også vil give overløb. Derfor typen long.
I øvrigt vil programmet køre ulideligt langsomt, hvis tekststrengen R begynder at blive stor. Addition af tekststrenge er ikke noget VB er glad for. Så man skulle nok istedet benytte en dynamisk tabel til at opsamle resultaterne. (men igen: hvad skulle man dog bruge 1000000 tekststrenge til?)
>ErikJacobsen> Din løsning duer desværre ikke. Du gør forskel på rækkefølgen. AAC og CAA skal opfattes som det samme "ord". Feks. hvis der n=2 og p=2 AA, AB, BA er de eneste. Din løsning udskriver AA, AB, BA og BB.
Antallet af ord af længde p og hvor tegnene skal udtages fra et alfabet med n tegn ere som bekendt p^n. Deter også det, der svarer til cykellås-situationen.
Men hvad bliver antallet, hvis vi er lige glade med rækkefølgen af tegnene? Her kan jeg ikke umiddelbart finde en formel.
ErikJacobsen> Du har ret i at formuleringen er uheldig.Spørgsålet dukkede op i forbindelse med en løsning til http://www.eksperten.dk/spm/374314 som handler om at få udskrevet en liste af kombinationer (p forskellige ting udtages fra en samling af n forskellige ting).
Løsningen her er iøvrigt endnu ikke akcepteret af den, der har stillet spørgsmålet.
Ja,nu er det ok. En god løsning! Nu ville det være rart at kunne finde et regneudtryk for antallet af "ord".
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.