![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Sesselkleber
Registriert seit: 17.01.2005
Beiträge: 567
|
Ich stehe hier gerade total auf dem Schlauch.
Angenommen ich habe den Wert 15 und eine Zahlenreihe von 1 bis 10 Nun möchte ich alle Konstellationen der Zahlenreihe (also: 1+1, 1+2, 2+2, 6+7+8, 3+9, 1+9) durchproboeren bis ich auf 15 komme oder alle Konstellationen durch habe. Irgendwie fehlt mir gerade der Durchblick das zu tun... Wie geh ich da vor? *schlauchsteher* sparrow |
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 515
|
Hat die Zahlenreihe ein bestimmtes Format (also z. B. Array o. ä.) oder ist das egal?
[edit] Dürfen Zahlen doppelt vorkommen, also praktisch 1+1+1+2?
__________________
Software, Handy Spiele und Libraries - kostenlos Ein werdendes Java Buch in Blog Form Geändert von Gottzilla (03.05.2006 um 09:38 Uhr). |
|
|
|
|
|
Nach oben #3 |
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
|
ich schreibs mal als php-code
PHP-Code:
in aktion: http://robo47.net/public/developersg...rtebereich.php EDIT: ich seh grad das macht nur für 2 zahlen das ganze, nicht ganz das gewünschte ergebnis mfg robo47 Geändert von robo47 (03.05.2006 um 09:42 Uhr). |
|
|
|
|
|
Nach oben #4 | |||
|
Sesselkleber
Registriert seit: 17.01.2005
Beiträge: 567
|
Zitat:
Zitat:
Also: 1+1+1+2 geht nicht. Ich geh jetzt einfach mal davon aus, dass die "Zahlenreihe" die Indexnummer eines Arrays ist. Zitat:
Man muss sich das ganze so vorstellen: Ich habe eine Zahl (15) und ganze viele andere (in dem Array mit der Länge 20). Nun möchte ich alle Werte aus dem Array miteinander summieren, alle Möglichkeiten durchspielen und dann entweder: 1. Eine Kostellation finden die 15 ergibt und darauf reagieren 2. Wenn alle Kombinationen durchprobiert sind abbrechen bzw. den Ablauf des Programms anderweitig fortsetzen. |
|||
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 515
|
Schau mal ob das sowas ist, was du suchst. Funktioniert aber momentan nur mit Zahlen die bei 1 Anfangen und lückenlos bis n weitergehen.
Code:
public class Konstellation {
private int wert = 0;
private int[] zahlen = null;
public void setWert(int wert) {
this.wert = wert;
}
public void setZahlen(int ... zahlen) {
this.zahlen = zahlen;
}
public void execute() {
for (int i = 0; i < zahlen.length; i++) {
iterate(new int[] {zahlen[i]});
}
}
private void iterate(int[] curLine) {
int cur = 0;
int[] newLine = new int[curLine.length + 1];
for (int j = curLine[curLine.length -1]; j < zahlen.length; j++) {
cur = 0;
for (int k = 0; k < curLine.length; k++) {
newLine[k] = curLine[k];
cur += curLine[k];
}
newLine[curLine.length] = zahlen[j];
cur += zahlen[j];
if (cur == wert) {
System.out.print(newLine[0]);
for (int k = 1; k < newLine.length; k++) {
System.out.print("+" + String.valueOf(newLine[k]));
}
System.out.println("=" + String.valueOf(cur));
}
iterate(newLine);
}
}
public static void main(String[] args) {
Konstellation konst = new Konstellation();
konst.setWert(15);
konst.setZahlen(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
konst.execute();
}
}
|
|
|
|
|
|
Nach oben #7 | |
|
Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 515
|
Ergebnis wäre folgendes:
Zitat:
|
|
|
|
|
|
|
Nach oben #8 |
|
Sesselkleber
Registriert seit: 17.01.2005
Beiträge: 567
|
Ok, Gott der API
könntest du den Code noch so ändern, dass er gar nicht gegen einen Wert prüft sondern einfach nur alle Konstellationen die er gerade durchprobiert ausgibt. Und ein paar Kommentare einfügen? Das wäre supi nett |
|
|
|
|
|
Nach oben #9 |
|
Erfahrener Benutzer
Registriert seit: 02.02.2005
Beiträge: 515
|
Hab den Code mal ein bisschen erweitert. Jetzt kannst du auch x-beliebige Zahlen in einer x-beliebigen Reihenfolge übergeben. Außerdem ist das Umschreiben auf andere Datentypen (z. B. Strings) nur ein kleiner Aufwand.
PHP-Code:
|
|
|
|
|
|
Nach oben #10 |
|
Erfahrener Benutzer
Registriert seit: 18.08.2005
Beiträge: 108
|
Nuja, die Variante zeigt wohl eher die Hässlichkeit imperativer Algorithmen... hier mal ein einfaches rekursives Backtracking.
Dies trifft bei jedem Schritt nur eine Entscheidung, ob die aktuelle Zahl aufsummiert oder weggelassen werden soll, und macht für beide Varianten einen Rekursionszweig. PHP-Code:
Geändert von Waq (04.05.2006 um 16:06 Uhr). |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|