PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kombinationsmöglichkeiten erstellen



necory
18.12.2007, 08:58
hy,

es geht darum

ich bräuchte eine möglichkeit oder besser gesagt ein programm das folgendes bewältigt

ich habe zahlen von 1-4 diese sollen verschiedenartig kombiniert werden sprich folgendermaßen

1 2 3 4
11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44
usw.

es soll eben immer eine zahl bzw. 4 weitere möglichkeiten dazu kommen

diese sollen gebunden werden sprich ich drücke die taste "1" auf der tastatur und er fragt das array 1 ab bei "2" das zweite usw. müsste bis zu 11 gehen

wie würde sowas ungefähr aussehen?

danke schonmal, glaube es ist recht einfach nur würde gern sehen wie man es am elegantesten lösen sollte

Hamachi-1
18.12.2007, 10:16
Ich würds mit ner For-Schleife machen

ob ich das richtig gemacht habe :? bin mir nicht sicher..

bin noch ein Newbie..



#include <iostream>
#include <conio.h>
using namespace std;

int main ()
{
int i;
cout << "Hier bitte Zahl von 1 bis 4 eingeben: "<<endl;
cin >> i;

cout<<"Die eingegebene Zahl ist:"<<endl << i <<endl;
getch();

for (i; )
{
for (j=-; j<-0; j = j + 1) // über all wo ein "-" steht musst du die zahl eingeben
{
cout << i << endl;
cin.get();
return 0;
}
}
}


>> wen was falsch ist BITTE verbessern!

Mfg Hamachi-1

l0dsb
18.12.2007, 12:14
Hier mal der klassische Lösungsansatz zum Problem. Eine Sache war mir noch unklar, der Permutationscode unten (google) vertauscht die Elemente und gibt alle Kombinationen aus. War das von dir erwünscht oder sollen auch Elemente öfter vorkommen können?


#include <stdio.h>
#include <conio.h>

char in[] = "01234";

void permutation(char *pSet, long pIndex, long pSetSize)
{
if(pIndex == pSetSize - 1)
{
printf("\n\t");
for(long i = 0; i < pSetSize; i++) printf(" %c", pSet[i]);
}
else for(long i = pIndex; i < pSetSize; i++)
{
char Old = pSet[i];
pSet[i] = pSet[pIndex];
pSet[pIndex] = Old;

permutation(pSet, pIndex + 1, pSetSize);

pSet[pIndex] = pSet[i];
pSet[i] = Old;
}
}

int main()
{
permutation(in, 0, 5);
getch();
}

necory
18.12.2007, 12:18
danke, aber du hast das nicht kompiliert oder?

denn was vorneweg vergessen wurde ist j zu deklarieren, kein problem nur blick ich grad net was ich hier noch korrigieren muss

error C2143: Syntaxfehler : Fehlendes ';' vor ')'
ist bei folgendem snip

for (i; )
{
for (j=1; j<10; j = j + 1) // über all wo ein "-" steht musst du die zahl eingeben
{

bezogen auf
for (i; )

edit: danke fogx werde es grad mal testen
edit2: ja geht fast in die richtung
nochmal genauer
zahlen zur verfügung (1,2,3,4) keine 0
ich drücke die taste 1 zahlen werden abgerufen, nacheinander (1,2,3,4)
ich drücke die taste 2 zahlen werden abgerufen, nacheinander (11,12,13,14,21,22,23,24,31,32,33,34,41,42,43,44)

das jetzt weiter zu machen wäre zuviel schreibarbeit denn es würde ja so an kombinationen aussehen

taste1: 4
taste2: 16
taste3: 64
taste4: 256
taste5: 1024

möglichekiten

l0dsb
18.12.2007, 15:34
Wenn du Zahlen auch doppelt vorkommen dürfen, hilft dir dieser Code eventuell weiter: (Klick) (http://free-hack.com/viewtopic.php?p=303545#303545). Ist zwar nicht besonders optimiert, funktioniert aber.

Du kannst dir die Werte ja in eine Table schreiben, so wie ich das verstehe, müssen sie nicht zwingend zur Laufzeit berechnet werden. So sparst du Leistung.