Zerlegen einer Zahl

Diskutiere Zerlegen einer Zahl im Allgemeine Java-Themen Bereich.
J

j_x_qq_

Hallo, ich hätte eine Frage zu einem Programm, dass ich vorhabe zu schreiben. Angenommen man hat eine Integer Zahl und man möchte sie in 2er und 1en zerlegen und es in der Konsole anzeigen. z.B. 5 kann man wie gefolgt zerlegen:

2 2 1
1 2 2
2 1 1 1
1 2 1 1
1 1 2 1
1 1 1 2
1 1 1 1 1

und das soll man für alle Zahlen machen können. Habt ihr zufällig eine Idee wie man das anrichten könnte? Danke im Vorraus :)
 
H

httpdigest

Das ist wieder eine sehr schöne Übung für Rekursion.
Du willst eine Methode, die als Parameter die noch zu zerlegende (Rest-)Zahl `n` und die "bis jetzt" berechnete Zerlegung (z.B. Liste von Ziffern) bekommt und nun soll die Methode daran noch entweder eine 1 oder eine 2 anhängen (oder gar keine weitere Ziffer, falls `n` == 0). Es ergibt sich also ein Rekursionsbaum.
Beim Zurückrollen bzw. Hochwandern der Rekursion konkatenierst du dann alle berechneten Listen zu einer Liste von Listen von Ziffern zusammen und hast dein Ergebnis.
 
J

j_x_qq_

Das ist wieder eine sehr schöne Übung für Rekursion.
Du willst eine Methode, die als Parameter die noch zu zerlegende (Rest-)Zahl `n` und die "bis jetzt" berechnete Zerlegung (z.B. Liste von Ziffern) bekommt und nun soll die Methode daran noch entweder eine 1 oder eine 2 anhängen (oder gar keine weitere Ziffer, falls `n` == 0). Es ergibt sich also ein Rekursionsbaum.
Beim Zurückrollen bzw. Hochwandern der Rekursion konkatenierst du dann alle berechneten Listen zu einer Liste von Listen von Ziffern zusammen und hast dein Ergebnis.
Erst mal danke für deine Antwort, aber leider habe ich dich nicht genau verstehen können. Könntest du das bitte etwas verständlicher erklären? Bin nämlich ein Anfänger. Wäre dir sehr dankbar.
 
I

insert2020

Ich denke @httpdigest könnte so etwas meinen...
Java:
public class Main {
	public static void print(int zahl, String zeichen) {
		if (zahl == 0) {
			System.out.println(zeichen);
		}
		for (int i = 1; i <= zahl; i++) {
			if (zeichen == null) {
				print(zahl - i, String.valueOf(i));
			} else {
				print(zahl - i, zeichen + " " + i);
			}
		}
	}

	public static void main(String[] args) {
		print(5, null);
	}
}
Code:
1 1 1 1 1
1 1 1 2
1 1 2 1
1 1 3
1 2 1 1
1 2 2
1 3 1
1 4
2 1 1 1
2 1 2
2 2 1
2 3
3 1 1
3 2
4 1
5
 
J

j_x_qq_

Ich denke @httpdigest könnte so etwas meinen...
Java:
public class Main {
    public static void print(int zahl, String zeichen) {
        if (zahl == 0) {
            System.out.println(zeichen);
        }
        for (int i = 1; i <= zahl; i++) {
            if (zeichen == null) {
                print(zahl - i, String.valueOf(i));
            } else {
                print(zahl - i, zeichen + " " + i);
            }
        }
    }

    public static void main(String[] args) {
        print(5, null);
    }
}
Code:
1 1 1 1 1
1 1 1 2
1 1 2 1
1 1 3
1 2 1 1
1 2 2
1 3 1
1 4
2 1 1 1
2 1 2
2 2 1
2 3
3 1 1
3 2
4 1
5
Danke für deine Antwort. Ich habe eine einfachere Lösung raus:

Java:
import java.util.Scanner;

public class Knoten {

    public static void main(String[] args) {

        System.out.println("Geben Sie eine Länge ein: ");

        Scanner n = new Scanner (System.in);

        int beispiel = n.nextInt();

        beispielRechner (beispiel, "");

    }



    public static int beispielRechner(int laenge, String beispiel) {

        if (laenge ==0) {

            System.out.println(beispiel);

            return 1;

        

        }

        else if (laenge >= 1) {   
        return beispielRechner (laenge-2, beispiel+2)+  beispielRechner (laenge-1, beispiel+1);
        }

        return laenge;
    }

}
 
I

insert2020

Hallo, ja das ginge vielleicht auch, würde die übergebene Zahl "laenge" aber nur mit den Zahlen 2 und 1 darstellen...
Java:
	public static int beispielRechner(int laenge, String beispiel) {
		if (laenge == 0) {
			System.out.println(beispiel);
			return 1;
		} else if (laenge >= 1) {
			return beispielRechner(laenge - 2, beispiel + 2) + beispielRechner(laenge - 1, beispiel + 1);
		}
		return laenge;
	}

	public static void main(String[] args) {
		beispielRechner(5, "");
	}
Wenn das so gewünscht ist, dann ist alles super. =)
 
J

j_x_qq_

Hallo, ja das ginge vielleicht auch, würde die übergebene Zahl "laenge" aber nur mit den Zahlen 2 und 1 darstellen...
Java:
    public static int beispielRechner(int laenge, String beispiel) {
        if (laenge == 0) {
            System.out.println(beispiel);
            return 1;
        } else if (laenge >= 1) {
            return beispielRechner(laenge - 2, beispiel + 2) + beispielRechner(laenge - 1, beispiel + 1);
        }
        return laenge;
    }

    public static void main(String[] args) {
        beispielRechner(5, "");
    }
Wenn das so gewünscht ist, dann ist alles super. =)
Genau, man sollte Zahl nur mit 1 und 2 darstellen. Danke :)
 
Thema: 

Zerlegen einer Zahl

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben