array sortieren 2!!
-
Hallo,
mir ist nicht ganz klar warum du ausgerechnet diese Zahlen wählst. Warum nimmst du nicht den nativen Zahlenwert z.B. a=97 ? Da bräuchtest du nichtmal explizit zuweisen weil a 97 repräsentiert. Dein sort funktioniert dann trotzdem.
-
Hmmm...ist ja doch ganz einfach
Also erstmal:
#include <iostream> using namespace std; int main() { for(;;) { cout<<"DANKE!\n"; } return 0; }
Die Zahlenwerte sind nur Beispiele! In meinem eigentlichen Programm lauten die ganz anders! Aber warum ich auch da nicht mit "97" für "a" arbeiten kann, wäre jetzt zu kompliziert zu erklären!
Gruß kira
-
Hallo,
kommst du jetzt nach den vielen Beiträgen zurecht, oder haben wir dich ganz verwirrt!?
Ich kann mir dein Programmteil nochmals anschauen, wenn du wirklich nicht weiter weisst..
MfG
-
Danke für das Angebot, aber ich habs hinbekommen, es funktioniert!
Danke
kira
-
@ you:
Hab nochwas:
Kannst du mir sagen, ob es bei meinem Programm-Teil mit gepostetem Quelltext möglich ist, eine einzelne Permutation per Zufall auszuwählen und auszugeben?? Vielleicht weißt du auch wie..??
(Ich hab echt schon alles ausprobiert!)Gruß
kira
-
Hallo,
1. Melde dich hier im Forum an. Hat schon seine Vorteile..
2. Poste nochmal deinen Code.. die ausgereifte VarianteMfG "you"
-
kira = b2
@ you: Hab mich schon gewundert, warum du nicht registriert warst...
Hier mein Code:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int y=0,zahler=0; char b[5]; do { cout<<"Buchstabe: "; cin>>b[y]; y++; } while(y<5); vector<int> array; //vector<int>::iterator it; //wird bei Umwandlung in Buchstaben nicht mehr benötigt for(int a=0;a<5;a++) { if(b[a]=='a')array.push_back(9); if(b[a]=='b')array.push_back(3); if(b[a]=='c')array.push_back(14); if(b[a]=='d')array.push_back(1); if(b[a]=='e')array.push_back(16); } sort(array.begin(), array.end()); // hier wird sortiert //for(it=array.begin();it!=array.end();++it) //wird bei Umwandlung in Buchstaben nicht mehr benötigt //{ bool ausgeben=true; for(int i=0;i!=array.size();++i) { if(array[i]==1 && (array[i+1]==3 || array[i-1]==3))ausgeben=false;//Ausgabe nur, wenn "1" und "3"(b und b)nicht nebeneinander liegen } if(ausgeben==true) { for(int c=0;c!=array.size();c++) { if(array[c]==9)cout<<"a "; //hier wird umgewandelt if(array[c]==3)cout<<"b "; if(array[c]==14)cout<<"c "; if(array[c]==1)cout<<"d "; if(array[c]==16)cout<<"e "; } } //} cout<<"\n"; while(next_permutation(array.begin(), array.end())) //hier werden Permutationen gebildet { //for(it=array.begin();it!=array.end();++it) //wird bei Umwandlung in Buchstaben nicht mehr benötigt //{ bool ausgeben=true; for(int i=0;i!=array.size();++i) { if(array[i]==1 && (array[i+1]==3 || array[i-1]==3))ausgeben=false;//Ausgabe nur, wenn "1" und "3"(d und b) nicht nebeneinander liegen } if(ausgeben==true) { for(int c=0;c!=array.size();c++) { if(array[c]==9)cout<<"a "; //hier wird umgewandelt if(array[c]==3)cout<<"b "; if(array[c]==14)cout<<"c "; if(array[c]==1)cout<<"d "; if(array[c]==16)cout<<"e "; } if(c==array.size()) { zahler++; cout<<"\n"; } } //} } cout<<"\n\nEs gibt "<<zahler<<" Uebereinstimmungen!"; return 0; }
So also ich hab die Ausgabe wieder in Buchstaben! Jetzt würde ich mir aber gern eine Buchstaben-Kette per Zufall ausgeben lassen!
In meinen Programm wird die 1. Permutation duch sort() gebildet und die restlichen durch next_permutation()! Falls es dir möglich ist, eine Permutation aus next-permutation() per Zufall auswählen zu lassen, dann bleibt ja zusätzlich noch die 1. Permutation durch sort() stehn! Somit hätte ich zwei Ausgaben, obwohl ich nur eine bräuchte! Ist auch dieses Problem zu lösen?Vielleicht hast du eine Idee...
Gruß
b2
-
Wenn du 5 Buchstaben eingibst (abcdef) existieren insgesamt 2^5 Möglichkeiten = 32 Möglichkeiten.
1. Du speicherst alle möglichen Permutationen in einem vector
2. Mitint i = rand()%(max - min) + min
lässt du dir eine Zufallszahl zwischen min und max ermitteln. max = 2^5 = 32!
3. Dann holst du dir das Element and der Stelle i und somit eine zufällige PermutationMfG
Noch etwas.. Wofür brauchst du das Ganze? Was wird das für eine Anwendung?
-
Ich werds dir erzählen, wenn ich damit fertig bin, das ist nämlich eine komplexere Sache...habs aber hoffentlich bald geschafft
Mein Problem bei der Sache ist aber schon, wie ich alle möglichen Permutationen in einem Vector speichere?! Wie spreche ich überhaupt eine einzelne Permutation in meinem Programm an?? Ich weiß wie ich alle auf einmal anspreche, aber nur eine einzelne??
Kannst du mir nicht so einen kleinen Algo für die Zufalls-Ausgabe postenIn meinem geposteten Prog dürfte kein Fehler sein, kannsts ja vielleicht gleich da einbauen...Du musst natürlich nicht, du würdest mir aber gewaltig damit helfen!
(Wenn ich die Zufallspermutation eingebaut habe, muss ich nur noch die Ausgabe gestalten und wäre dann endlich fertig)Gruß
kira, b2
-
Mir fällt momentan die MSDN. Ich habe dort ein schönes Beispiel gefunden.
Ich werd's mir morgen früh mal anschauen..Mein Problem bei der Sache ist aber schon, wie ich alle möglichen Permutationen in einem Vector speichere?!
Das habe ich mich auch schon gefragt. Aber in dem MSDN Beispiel werden die Permutationen mit cout << ausgegeben. Ich glaube, dass es nicht mehr so schwierig ist sie in einem vector zu speichern.
Kannst du mir nicht so einen kleinen Algo für die Zufalls-Ausgabe posten
Das Forum hat eine schöne Suchfunktion.
Gib dort mal Zufallszahl ein.. schon wirst du fündig.
int i = rand()%(max - min) + min;
Hier brauchst du nur noch Werte einsetzen.
#include <algorithm> // nicht vergessen! // srand wäre an dieser Stelle auch nicht verkehrt -> MSDN int i = rand()%(10 - 1) + 1; // Erzeugt eine Zufallszahl zwischen 1-10
Sonst gibt's nicht mehr viel zu sagen, ausser dass du dich mit Vectoren, Iteratoren auseinandersetzen solltest.. :p
Bis morgen,
MfG
-
Achso.. Mir fehlt
-
Hallo,
Hmm zufällige Permutation deiner Werte.
Erst wie vorgeschlagen alle Permutationen erzeugen und dann mit zufallsindex drauf zu greifen.void AllPermutations(std::vector<int> vec,std::vector<vector<int> > &ret){ std::sort(vec.begin(),vec.end()); ret.push_back(vec); while(std::next_permutation(vec.begin(),vec.end())){ ret.push_back(vec); } return; }