[C++] Hilfe bei einer Aufgabe: Zerlegung einer ganzen Zahl

Lady_78

Newbie
Registriert
Mai 2006
Beiträge
5
Ich habe so eine Aufgabe:

Schreiben Sie (C++ Sprache) eine Funktion, die alle Zerlegungen ("Partitionen") einer ganzen Zahl bestimmt. Die ganze Zahl ist Parameter der Funktion, die Partionen werden in einem Vektor von Vektoren abgelegt.

Beispiel: Die Zahl 4 hat folgende Zerlegungen:

4
3+1
2+1+1
2+2
1+1+1+1

Sie haben 5 Partitionen - also hat der "äußere" Vektor 5 Elemente. Die erste Partition hat 1 Element - also hat dieser Vektor genau ein Element, nämlich die ganze Zahl 4. Der letzte Vektor hat 4 Elemente, nämlich 4 mal die 1.

Irgendwie klappt's nicht bei mir mit diesem Programm. Ich habe ein Teil selbst geschafft, aber ich bin mir nicht sicher, dass es kann bis ende geschrieben werden, so wie ich es mir vorgestellt habe, deswegen stelle ich mein Teil nicht aus.
Werde dankbar für Ihre Hilfe!
 
Zuletzt bearbeitet:
AW: Hilfe bei einer Aufgabe

Und was erwartest du jetzt von uns?
Die komplette Aufgabe wirst du nicht bekommen, also ist es wohl besser, wenn du deinen geschriebenen Code mal hier reinstellst.
Tipp: Die Aufgabe eignet sich wunderbar für Rekursion.
 
AW: Hilfe bei einer Aufgabe

Wär auch mal nett zu wissen für welche Programmiersprache das überhaupt entstehen soll.
 
AW: Hilfe bei einer Aufgabe

Zeig uns doch mal das, was du schon geschafft hast. :) Dann helfen wir auch sicher gerne bei Fehlern und konkreten Problemen. Hausaufgaben macht hier aber keiner für dich.

Vielleicht schonmal für den Anfang - woran scheitert es? Logik oder C++ oder beides?
 
AW: Hilfe bei einer Aufgabe

#include <iostream>
#include <vector>

using namespace std;


int main()
{
int zahl = 0;

cout << "Zahl: ";
cin >> zahl;

vector<vector<int> > v1(zahl);

// dreieck bilden
for(size_t zeile = 0; zeile < v1.size(); zeile++)
v1[zeile] = vector<int>(zeile + 1);

// init
for(size_t zeile = 0; zeile < v1.size(); zeile++ )
{
cout << endl;
for(size_t spalte = 0; spalte < v1[zeile].size(); spalte++)
{
if (spalte == 0)
v1[zeile][spalte] = v1.size() - zeile;
else
v1[zeile][spalte] = 1;
}
}

// auf display zeigen
for(size_t zeile = 0; zeile < v1.size(); zeile++ )
{
cout << endl;
for(size_t spalte = 0; spalte < v1[zeile].size(); spalte++)
cout << v1[zeile][spalte];
}
return 0;
}
 
AW: Hilfe bei einer Aufgabe

Wenn man eine Zahl eingibt, wird ein Dreieck gebildet sein, der in "äußere" Vektor absteigende Zahlen hat und im "Inneren" erstmals Einzen, die später andere "mögliche" Summanden bilden helfen.

als weiteres, müssen zwei Zahlen die im "inneren" Vektor stehen addiert sein, und wenn sie Summe, kleiner als das Zahl von "außere" Vektor, bilden, dann muss die Summe statt die Summanden gespeichert sein und im außere Vektor mit push_back neue innere Vektor zugefügt sein.
Das ganze muss in for-Schleife sein, mit mehreren if's, .... ab hier klappt bei mir nicht mehr :(
Wenn ich in Google suche ähnliches Programm, dann findet man nur Partitionsfunktion, und dies zu programmieren ist nicht mein Ziel.

Sorry, wenn ich nicht sehr deutlich erklärt habe; ich bin nicht so lange in Deutschland.


Schon mal danke in voraus!
 
Zuletzt bearbeitet:
Vielen Dank für eure Hilfe! :D
Es ist einfach reine Zeitverschwändung hier was zu schreiben, man bekommt nur zinische Kommentare, aber wenn ihr in wircklichkeit so Profi in dem Gebit seid, was ist dann mit eure Wissen passiert? Wozu existiert dieser Forum überhaupt, um Neulinge auszulachen???
 
Wie oben schon gesagt, haben wir keine Lust irgentwelche Hausaufgaben zu machen.
Du brauchst ein konkretes Problem und dann wird dir auch geholfen.
Aber auf ein "macht mal" oder "irgentwie so ab da mal komplett erklären bitte" hat hier glaub ich keiner Lust. Stell deine Frage nochmal ganz konkret. Erwartenicht, dass dein Programm danach fertig ist. Es ist dann nur so weit, dass du ohne Probs weiterarbeiten kannst.
Ausserdem musst du bedenken, dass hier auch einige Jugendliche dabei sind, die beim Thema Programmieren zwar mitreden können, aber Vektoren, leider nicht begreifen, dank unserem genialen Schulsystem lernt man das nämlich erst dann, wenn mans schon fast nicht mehr braucht ;)
 
Zurück
Oben