Mich würde nun interessieren, wie man sich die Zahlen anzeigen lassen kann.
Also zum beispiel:
{5 8 1 4} Und ich möchte die Summe 12 haben, dass er mir anzeigt:
12 = 8 + 4
In meinem Code zeigt er mir bis jetzt nur an, ob die Summe darstellbar ist.
Habe aber gerade keine Idee, wie er mir die Zusammensetzung anzeigt.
Java:
classZielsumme{publicstaticvoidmain(String[] args){// Ermitteln der DateilaengeIn.open("zahlen.txt");int length =0;while(In.done()){In.readInt();++length;}--length;int[] a =newint[length];// Schliessen und Wiederoeffnen setzt Dateizeiger// auf AnfangIn.close();// Einlesen der DateiIn.open("zahlen.txt");for(int i =0; i < length;++i){
a[i]=In.readInt();Out.print(a[i]+" ");}In.close();Out.print("Gewuenschte Summe: ");int sum =In.readInt();Out.println("Summe ist "+(darstellbar(a, sum)?"":"nicht ")+"darstellbar");}staticbooleandarstellbar(int[] a,int sum){if(sum ==0){returntrue;}elseif(a.length ==1){return sum == a[0];}else{// aKurz = Kopie von a ohne letztes Elementint[] aKurz =newint[a.length -1];for(int i =0; i < a.length -1;++i){
aKurz[i]= a[i];}returndarstellbar(aKurz, sum)||darstellbar(aKurz, sum - a[a.length -1]);}}}
Man muss an der richtigen Stelle "eingreifen" - dann, wenn man weiß, ob man eine Zahl braucht oder nicht.
Nicht die Lösung, aber ein ... kleiner Hint, zum Weiterbasteln:
Java:
staticbooleandarstellbar(int[] a,int sum){if(sum ==0){returntrue;}elseif(a.length ==1){return sum == a[0];}else{// aKurz = Kopie von a ohne letztes Elementint[] aKurz =newint[a.length -1];for(int i =0; i < a.length -1;++i){
aKurz[i]= a[i];}boolean ohne =darstellbar(aKurz, sum);boolean mit =darstellbar(aKurz, sum - a[a.length -1]);System.out.println("Ohne "+a[a.length -1]+" zum Erfolg? "+ohne);System.out.println("Mit "+a[a.length -1]+" zum Erfolg? "+mit);return ohne || mit;}}
Damit wird mir doch trotzdem true und false ausgegeben, gerade das möchte ich doch vermeiden, indem ich mir zeigen lasse wie die Summe darstellbar ist. Oder ist da was verstecktes, was ich nicht finde?
staticbooleandarstellbar(int[] a,int sum){if(sum ==0){returntrue;}elseif(a.length ==1){return sum == a[0];}else{// aKurz = Kopie von a ohne letztes Elementint[] aKurz =newint[a.length -1];for(int i =0; i < a.length -1;++i){
aKurz[i]= a[i];}boolean ohne =darstellbar(aKurz, sum);boolean mit =darstellbar(aKurz, sum - a[a.length -1]);if(mit =true){Out.println(sum +" = "+ a[a.length -1]);}else{Out.println(sum +"Nicht darstellbar");return ohne || mit;}}returntrue;}}
es klappt immer noch nicht so wie ich will Geht das überhaupt, dass man sagt
Das ist eine Zuweisung.... [c]if (mit == true)[/c] würde gehen, und wäre das gleiche wie [c]if (mit) [/c].... Die { ... } Klammern solltest du ... wieder richtig machen...