Aus Buchstaben Vorgabe (abcd) alle möglichen Keys berechnen.
-
Ein rekursiver Algorithmus findet sich unter:
-
[cpp]#include <string>
#include <iostream>
#include <algorithm>int main()
{
std::string str = "abcd";
while(std::next_permutation(str.begin(), str.end()))
{
std::cout << str << std::endl;
}
}[/cpp]
-
ssm schrieb:
[cpp]#include <string>
#include <iostream>
#include <algorithm>int main()
{
std::string str = "abcd";
while(std::next_permutation(str.begin(), str.end()))
{
std::cout << str << std::endl;
}
}[/cpp]Erstens unterschlägt der Code die erste Permutation und zweitens ist hier gar nicht nach den Permutationen gefragt worden.
-
Ponto schrieb:
Erstens unterschlägt der Code die erste Permutation
richtig
Ponto schrieb:
zweitens ist hier gar nicht nach den Permutationen gefragt worden.
-
Na sowas, ich denke mal, ich war mit meiner Lösung etwas verplant
Werde ich mich eben zurück in mein Loch verkriechen
-
Ich hätte noch was zu meiner wagen Idee oben. Allerdings "nur" C, funktioniert aber:
#include<stdlib.h> #include<stdio.h> int main() { char *eingabe = new char[20]; int *digits, i, laenge; printf("Ursprungs-Key:"); scanf("%s",eingabe); laenge = strlen(eingabe); digits = new int[laenge+1]; for(i=0; i<=laenge; i++) { digits[i] = 0; } do { printf("\n"); for(i=0; i<laenge; i++) { printf("%c", eingabe[digits[i]]); } digits[0]++; for(i=0; i<laenge; i++) { if(digits[i]>=laenge) { digits[i] = 0; digits[i+1]++; } } } while(digits[laenge] == 0); printf("\n"); delete digits; delete eingabe; return(0); }
-
Seit wann gibt es in C new und delete?
-
Okay, sorry. Halt so n Mischmasch-Zeug. Musste schnell gehen :p
-
So geht es schneller.
Die function hab ich von dem Link.#include <string> #include <iostream> using namespace std; void k(std::string const & f, std::string const & result, int len) { if (len == 0) { std::cout << result << std::endl; return; } std::string temp = result + " "; for (std::string::size_type i = 0; i != f.size(); ++i) { temp[temp.size()-1] = f[i]; k(f, temp, len-1); } } int main(){ string eingabe,tmp; cin>>eingabe; int a=eingeb.size(); k(eingabe,tmp,a); return 1; }
-
die std:: kannst du in void k weglassen
und in der sig bitte nur BBCode kein HTML verwenden ^^