G
Gelöschtes Mitglied 59006
Gast
Hallo ich brauche Hilfe bei einer Aufgabe, ich bin noch Programmieranfänger
ich muss ein Subset als int[] von einen Array finden, die zu einer gegebene Zahl summiert.
also ein typisches Teilmengensummen Problem.
Nur ich darf das originale Array nicht sortieren und ich darf keine rekursion benutzen. Außerdem darf ich keine Java bibliotheken benutzen.
ich habe eine Lösung geschrieben aber mein Array ist entweder immer 0 oder sie enthält manche werte mehrere mals.
könnt ihr mir dabei helfen? hier meine Lösung, wenn ich das ergebnis im loop printe gibt sie richtige ergebnis, aber am ende enthält mein array viele Zahlen
ich muss ein Subset als int[] von einen Array finden, die zu einer gegebene Zahl summiert.
also ein typisches Teilmengensummen Problem.
Nur ich darf das originale Array nicht sortieren und ich darf keine rekursion benutzen. Außerdem darf ich keine Java bibliotheken benutzen.
ich habe eine Lösung geschrieben aber mein Array ist entweder immer 0 oder sie enthält manche werte mehrere mals.
könnt ihr mir dabei helfen? hier meine Lösung, wenn ich das ergebnis im loop printe gibt sie richtige ergebnis, aber am ende enthält mein array viele Zahlen
Java:
public int[] DP() {
long counter = 0;
boolean sum = true;
boolean print = false;
int mySum = 0;
int listi = 0;
int[]last=new int[menge.length];
while (counter < (1 << menge.length)) {
if (sum) {
if (listi == menge.length) {
sum = false;
listi = 0;
print = mySum == summe;
if (!print) {
counter++;
mySum = 0;
sum = true;
}
continue;
}
if (((1L << listi) & counter) != 0) {
mySum += menge[listi];
}
listi += 1;
continue;
} else if (print) {
if (listi == menge.length) {
System.out.println();
listi = 0;
counter++;
mySum = 0;
sum = true;
continue;
}
if (((1L << listi) & counter) != 0) {
last[listi]=menge[listi];
System.out.print(last[listi]);
System.out.print(" ");
}
listi += 1;
continue;
} else {
// throw new RuntimeException("Invalid state!");
}
break;
}
System.out.println();
for(int i=0;i<last.length;i++) {
System.out.print(last[i]+",");
}
return last;
}
Zuletzt bearbeitet von einem Moderator: