Mischen String
Ich muss ein Programm schreiben, das stört ein 4-Buchstaben-string eingegeben durch den Benutzer. (Beispiel TESTEN können, werden verschlüsselt, wie tset, ttse etc...) Naja ich habe ein Programm, dass funktioniert, aber es beschränkt sich auf eine 4-element-char-array, und ich möchte wissen, ob es irgendeinen Weg gibt, zu machen, so dass ich nicht haben, um die Größe vorgegeben.
//4 letter word scrambler (ex. test tets tset...)
int counter=0;
int main(int argc, char* argv[])
{
char str[4];
cout << "Please enter a word: "; //ask for input
cin >> str;
counter+=1; //set counter to 1
cout << counter << " " << str << endl;
for (int i=0;i<3;i++){//iteration through one full loop in array
swap(str[i], str[i+1]); //swap two elements as iterates through array
counter+=1;//add 1 to counter each time
cout <<counter<<" "<< str << endl;
}
for (int i=0;i<3;i++){
swap(str[i], str[i+1]);
counter+=1;
cout << counter<< " " << str << endl;
}
for (int i=0;i<3;i++){
swap(str[i], str[i+1]);
counter+=1;
cout << counter << " " << str << endl;
}
for (int i=0;i<2;i++){
swap(str[i], str[i+1]);
counter+=1;
cout << counter << " " << str << endl;
}
system("PAUSE");
return 0;
}
Einfach eine einfache Fisher-Yates shuffle. Ich glaube nicht, verwenden Sie C++ -, so könnte es etwas genial bereits, dies zu tun-aber der wiki Artikel ist ziemlich gut und es ist auch verdammt-simple-Algorithmus. Beachten Sie, wie der shuffle läuft durch die ganzen - array (das ist, was macht es erweiterbar auf jede Größe-Sammlung). Sie können mit dieser implementation auf "output" (Sie brauchen nicht zu speichern, die gemischt array-Ergebnisse!).
suchen Sie alle die permutation oder willst du es zufällig?
Ihre erste Lösung ergibt genau 12 Lösungen, was auch immer passiert, so dass ich denke, es ist falsch, in vielen Fällen. Wollen Sie unterscheiden, unterschiedlich positioniert-gleich-Zeichen oder nicht? Also, Sie wollen die Permutationen mit oder ohne Wiederholungen? (resultcount für TTTT ist 4! oder 1 ?)
suchen Sie alle die permutation oder willst du es zufällig?
Ihre erste Lösung ergibt genau 12 Lösungen, was auch immer passiert, so dass ich denke, es ist falsch, in vielen Fällen. Wollen Sie unterscheiden, unterschiedlich positioniert-gleich-Zeichen oder nicht? Also, Sie wollen die Permutationen mit oder ohne Wiederholungen? (resultcount für TTTT ist 4! oder 1 ?)
InformationsquelleAutor Wil Prim | 2011-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, wenn Sie wollen, schieben Sie die Zeichenfolge einmal oder drucken Sie alle Permutationen der Buchstaben im Wort. Beide sind sehr einfach mit Hilfe der C++ Standard-Bibliothek.
Dieser erste bit-code enthält eine einzige zufällige shuffle:
Den folgenden druckt alle Permutationen der Zeichenfolge:
InformationsquelleAutor Blastfurnace
Es ist ein einfacher Weg zu klettern, einen string der Länge N.
Durchlaufen Sie die Zeichenfolge aus Zeichen
0 -> n-1
.Wählen Sie zwei zufällige indices
i,j
(überrandom(n)
) bei jeder iteration, und tausche diese beiden Indizes.Können Sie beweisen, dass es eine einheitlich random scrambling.
InformationsquelleAutor Dr. Aleksandr Yampolskiy
Können Sie einen std::string statt char[4]. (Strings sind immer vorzuziehen, char[] jedenfalls). Dein code wäre dann:
Und für einen besseren Weg, um schieben Sie die Zeichenfolge check out:
InformationsquelleAutor memecs