ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
3305
3305
EMPFEHLEN
-
Hallo Leute,
ich muss ein Programm erstellen, für welches ich alle Möglichen kombinationen der Zahlen 0-9 benötige.
Keine Zahl soll doppelt Vorkommen.
Die Funktion Permutation soll einmal aufgerufen werden können und dann verändertaust sie genau 2 Zahlen in meinem String. Um also alle Kombinationen von 0-9 zu erhalten, muss Permutation 3628800mal aufgerufen werden.
Ich hab mich schon über Permutation bei Google schlau gemacht, jedoch komme ich da der Lösung meines Problems nicht näher.
Ich hoffe ihr könnt mir helfen, steh momentan echt auf dem Schlauch.
Grüsse
-
Ehm das ist natürlich krank
Aber am einfachsten geht es durch:
aber das std::cout ist sehr langsam ... vllt hier auf C zurück greifen ... oder sogar auf putchar und selbst + '0' zu i usw. addieren um das richtige Zeichen zu bekommen ...Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13
unsigned char[3628800][10]; for (unsigned int i(0); i < 10; ++i) for (unsigned int j(0); j < 10; ++j) for (unsigned int k(0); k < 10; ++k) for (unsigned int l(0); l < 10; ++l) for (unsigned int m(0); m < 10; ++m) for (unsigned int n(0); n < 10; ++n) for (unsigned int o(0); o < 10; ++o) for (unsigned int p(0); p < 10; ++p) for (unsigned int q(0); q < 10; ++q) for (unsigned int r(0); r < 10; ++r) std::cout << i << j << k << l << m << n << o << p << q << r << "\n";
...Code cpp:1
std::putchar(i + '0');
Geändert von devDevil (17.05.08 um 18:21 Uhr)
-
17.05.08 12:02 #3
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
schau mal hier:
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
/* * File: Main.c * Author: Tom * */ #include <stdio.h> #include <stdlib.h> void swap(char *c, int firstIndex, int secondIndex); void permut(char *c, int endIndex); int main(int argc, char** argv) { char c[20]; printf("Chars: "); scanf("%s",&c); fflush(stdin); permut(c,strlen(c)-1); return (EXIT_SUCCESS); } void swap(char *c, int firstIndex, int secondIndex){ char tmp = c[firstIndex]; c[firstIndex] = c[secondIndex]; c[secondIndex] = tmp; } void permut(char *c, int endIndex){ if(endIndex == 0){ printf("%s\n",c); }else{ permut(c,endIndex-1); int i; for(i = 0; i<endIndex;i++){ swap(c,i,endIndex); permut(c,endIndex-1); swap(c,i,endIndex); } } }
Ausgabe:
Code :1 2 3 4 5 6 7 8
Chars: ABC ABC BAC CBA BCA ACB CAB [Press Enter to close window]
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Rekursiv ist eigtl. langsamer als Iterativ.
-
17.05.08 14:57 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
1) Ich habe nur einen anderen Algorithmus vorgestellt der etwas flexibler ist, als das was du da vorgeschlagen hast.
2) Rekursion ist nicht immer langsamer als Iteration! Jeder Funktionsaufruf kostet Zeit und Speicher das ist klar, jedoch besiegt eine clervere rekursive Implementierung oftmals eine umständliche iterative.
Weiterhin lässt sich der Nachteil des erhöhten Speicherplatzbedarfs mit Techniken wie Endrekursion / tailcalls: http://de.wikipedia.org/wiki/Endrekursion relativ einfach aus der Welt schaffen
, sofern die Sprache / der Compiler sowas unterstützt.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo,
@devDevil
mal abgesehen davon, ist dein Algorithmus auch noch falsch ...
1.) Hast du lauter Endlosschleifen drin
2.) Ist eine Permutation nur auf Mengen definiert, d.h. die Elemente müssen alle verschieden sein. => die Permutationsmenge einer Menge mit n Elementen besitzt n! Elemente. Deine "Menge" hat aber lauter Duplikate und besitzt folglich n^n Elemente, wenn du denn diese Endlosschleifen beseitigen würdest.
Gruß,
RedWing"I'm not deaf, I'm ignoring you"
----
-
Ich sag ja nix dagegen das du einen anderen Lösungsvorschlag anbringst
Hab die jetzt auch keinem Performancetest unterzogen :-P
@RedWing:
(1) Jop. Passiert wenn man es nur so reintippt.
(2) Wer hat von Permutation gesprochen? Er wollte nur alle möglichen Kombinationen ohne das 121 z.B. doppelt vorkommt. Das ist so der Fall.
-
Hallo,
naja, seine Aufgabenstellung impliziert das ja (bzw erschlägt einen der Zaunpfeiler fast
):
M = {0,...,9} => |M| = 10 => |P(M)| = 10! = 3628800Die Funktion Permutation soll einmal aufgerufen werden können und dann verändertaust sie genau 2 Zahlen in meinem String. Um also alle Kombinationen von 0-9 zu erhalten, muss Permutation 3628800mal aufgerufen werden.
Es sei dir verziehen :P(1) Jop. Passiert wenn man es nur so reintippt.
Gruß,
RedWing"I'm not deaf, I'm ignoring you"
----
-
Aua
Jetzt is et mir aber peinlich
Hab die Aufgabe scheinbar nicht zu ende gelesen denn den Teil mit Permutation hatte ich vorher noch nicht gelesen
Sorry ... habt ja recht
-
27.12.09 02:13 #10gulaschsuppe Tutorials.de Gastzugang
und auf welchem rechner soll das laufen?
gibt es online server, die das ergebnis als txt. datei ausgeben? das würde mich dehr interessieren
also
0000000000000
0000000000001
0000000000002
in txt. datei
vielen dank im vorraus
-
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
Ähnliche Themen
-
Permutation eines Arrays
Von 'GreenDragon' im Forum PHPAntworten: 1Letzter Beitrag: 04.10.10, 09:27 -
Permutation erzeugen
Von Thomas Darimont im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 0Letzter Beitrag: 26.06.10, 11:59 -
Permutation
Von om1krnoy im Forum C/C++Antworten: 6Letzter Beitrag: 17.05.10, 20:33 -
Zahlen einlesen - überwiegen positive oder negative Zahlen?
Von jenny1106 im Forum C/C++Antworten: 10Letzter Beitrag: 06.03.10, 20:51 -
Permutation (kombinationen anzeigen)
Von hemorieder im Forum C/C++Antworten: 1Letzter Beitrag: 05.04.06, 11:57





Zitieren



Login






