Permalänk
Medlem

Kombinationer [C++]

Någon som har nån ide om hur man kan göra en funktion som ger alla kombinationer t ex:

Pattern: 0 1 Max length: 2 0 1 00 01 10 11

Meningen är att man ska kunna anropa funktionen
next() och då returnerar den först 0 sedan 1 osv...

Visa signatur

"Anyone who puts a small gloss on a fundamental technology, calls it proprietary, and then tries to keep others from building on it, is a thief."
-Tim O'Reilly "http://iiice.net/~ice/stuff/secret_msg.wav" - who?

Permalänk
Medlem

Du kan göra en funktion som omvandlar dec->bin.
Sedan så är det bara att tuta och köra

Visa signatur

Scud: The other day, in the park, I was wondering why frisbees look bigger and bigger as they get closer to you
Scud: And then it hit me

Permalänk
Medlem

Nej alltså jag vill kunna ha vilket pattern som helst:

Pattern: a b c d e f g osv... Max lenght: 5 a b aa ab ac ad ae af ag osv...

Visa signatur

"Anyone who puts a small gloss on a fundamental technology, calls it proprietary, and then tries to keep others from building on it, is a thief."
-Tim O'Reilly "http://iiice.net/~ice/stuff/secret_msg.wav" - who?

Permalänk
Medlem

de låte som en läxa...ä re de le?

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem

Ser inte så svårt ut, men vad är Max Length?

Visa signatur

Perl - Made by Idiots, Java - Made for Idiots, C++ - Envied by Idiots

Permalänk
Medlem

Att den stannar vid max length tecken (ex: ggggg) kanske.

Visa signatur

//cykze

Permalänk
Medlem

kanske fungerar:

loopa först igenom alla sakerna i pattern och släng in dom i en array, ex en array0 som innehåller a, b, c
sen får du loopa igenom array0 och lägga på alla alternativen i array0 och spara allt i array1, så att den ser ut typ: aa, ab, ac, ba, bb, bc, ca, cb, cc.
sen är det väl bara att fortsätta, dvs loopa igen den nya arrayen och för varje värde i den lägga på värdena från array0.
På detta viset får du forsätta tills du har nått önskad längd på arrayerna sen får du skriva ut allt lite snyggt.

Är inte säker på att det fungerar men det lät rätt

Visa signatur

berta, gamla berta, du är en underbar maskin...

Permalänk
Medlem

Ok, här är lite kod, med en main, så du kan kolla om det funkar som du vill. Det kanske är nå fel, men jag har ett liv jag också.
(Kan man inte göra så att man ser tabarna?)

------------------------------

#include <iostream.h> #include <string.h> char *pattern; char *output; int pattern_length; int max_length; int counter = 1; // # Retunerar false om längden >= max_length # bool next() { int i = 0; int n = counter; char *foo = new char [max_length]; // Donar while (n != 0) { if (n / pattern_length != 0) foo[i] = pattern[n % pattern_length]; else foo[i] = pattern[n % pattern_length - 1]; n /= pattern_length; i++; if (i >= max_length) { delete [] foo; return false; } } for (n = 0; n < i; n++) output[i - n - 1] = foo[n]; output[i] = NULL; delete [] foo; counter++; return true; } // # Återställer # void reset() { counter = 1; } // # En test main # int main() { pattern = new char [128]; output = new char [128]; strcpy(pattern,"abcdefgh"); pattern_length = 4; max_length = 5; for (int i = 0; i < 20; i++) { if (next()) cout << output << endl; else break; } delete [] pattern; delete [] output; return 0; }

Visa signatur

Perl - Made by Idiots, Java - Made for Idiots, C++ - Envied by Idiots

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Knarken
Kan man inte göra så att man ser tabarna?

[.code]lite kod[/code]
(utan .)

EDIT: såhär blev resultatet av ditt program:

a b c aa ab ac ad ba bb bc bd ca cb cc cd aaa aab aac aad aba

Visa signatur

berta, gamla berta, du är en underbar maskin...

Permalänk
Medlem

OK, tack. Nu vet jag till nästa gång ...

Visa signatur

Perl - Made by Idiots, Java - Made for Idiots, C++ - Envied by Idiots

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Knarken
OK, tack. Nu vet jag till nästa gång ...

du kan ju faktiskt ändra ditt förra inlägg och lägga till taggarna annars

Visa signatur

berta, gamla berta, du är en underbar maskin...

Permalänk
Medlem

Tack för hjälpen men den där funkade ju inte så bra...
tror jag ska titta på det här någon annan gång när jag inte har 39°C feber

Visa signatur

"Anyone who puts a small gloss on a fundamental technology, calls it proprietary, and then tries to keep others from building on it, is a thief."
-Tim O'Reilly "http://iiice.net/~ice/stuff/secret_msg.wav" - who?

Permalänk
Medlem

Jaså?

Det funkar precis som du har visat för mig.

Visa signatur

Perl - Made by Idiots, Java - Made for Idiots, C++ - Envied by Idiots

Permalänk
Medlem

Ajaj, hitta ett fel, den hoppar över 'd' på första columnen.
Men orkar tyvär inte bry mig.

a
b
c
aa
ab
ac
ad
ba
bb
bc
bd
ca
cb
cc
cd
aaa
aab
aac
aad
aba

Visa signatur

Perl - Made by Idiots, Java - Made for Idiots, C++ - Envied by Idiots

Permalänk
Medlem

Om jag i ditt program sätter följande värden:

pattern = "01" pattern_length = 2 max_length = 2

Så förväntar jag mig följande utskrift:

0 1 00 01 10 11

Av ditt program får jag:

0

EDIT: Tror du missförstog mig lite.. tittar på det när jag inte har 39°C feber

Visa signatur

"Anyone who puts a small gloss on a fundamental technology, calls it proprietary, and then tries to keep others from building on it, is a thief."
-Tim O'Reilly "http://iiice.net/~ice/stuff/secret_msg.wav" - who?

Permalänk
Medlem

#include "stdafx.h" #include <atlstr.h> using namespace std; void getPattern(int nLevel, CString strResult, CString* pPattern) { --nLevel; if (nLevel >= 0) for (int i = 0; i < pPattern->GetLength(); i++) getPattern(nLevel, strResult + pPattern->Mid(i, 1), pPattern); else printf("%s\n", strResult); return; } int _tmain(int argc, _TCHAR* argv[]) { CString strPattern = "ab"; int nMaxLength = 3; for (int i = 1; i <= nMaxLength; i++) getPattern(i, "", &strPattern); return 0; }

Visa signatur

/ Joxx