HI ich hab folgende aufgaben stellung :
und ich hab irgendwie kein richtigen ansatzt für die aufgabe :
das hab ich bisher getan :
kann mir jemand helfen, auf den richtigen weg zukommen ???
Schreiben Sie eine Java-Methode
static void countSums(int[] a, int x)
welche die Anzahl der Möglichkeiten ermittelt, die Zahl x als Summe von (beliebig vielen) Elementen
des Arrays a darzustellen. Das Array a enthält nur positive Zahlen und keine Duplikate;
es ist nicht sortiert. Jedes Element darf pro Summe nur einmal verwendet werden. Beispiel:
a: 2 5 3 8 4 1 9
x: 9
Ergebnis: 5
(denn: 9 = 2 + 3 + 4
9 = 5 + 3 + 1
9 = 5 + 4
9 = 8 + 1
9 = 9)
Das Programm soll nur das Ergebnis ausgeben, nicht die Begründung. Ihre Lösung muss den
Divide-and-Conquer Ansatz und die folgende Beobachtung nutzen:
Das Array a sei in zwei ungefähr gleich große Teilfelder aLeft und aRight zerlegt
(wie bei Mergesort). Dann entspricht jede Darstellung von x als Summe von Elementen
aus a einer Zerlegung x = yLeft + yRight, wobei yLeft die Summe von
Elementen aus aLeft und yRight die Summe von Elementen aus aRight ist.
und ich hab irgendwie kein richtigen ansatzt für die aufgabe :
das hab ich bisher getan :
Code:
import java.io.*;
class Loesung {
static int anzahl = 0;
static int countSums(int[] a, int x) {
int y=0, z=0;
//auftrenung in Linken und Rechten Feld
int middle = a.length / 2;
int[] aleft = new int[middle];
int[] aright = new int[a.length - middle];
for (y = 0; y < middle; y++) {
aleft[y] = a[y];
}
for (y = 0; y < aright.length; y++) {
aright[y] = a[middle + y];
}
//======================================================
if (a.length == 1) {
if (a[0] == x) {
anzahl++;
return 0;
}
}
else {
for (int i = 0; i < x; ++i) {
return (countSums(aleft, i) + countSums(aright, x-i));
}
}
return anzahl;
}
public static void main(String[] args) throws IOException {
InputStreamReader inStream = new InputStreamReader(System.in);
BufferedReader stdin = new BufferedReader(inStream);
String eingabe;
int[] a = new int[7];
a[0] = 2;
a[1] = 5;
a[2] = 3;
a[3] = 8;
a[4] = 4;
a[5] = 1;
a[6] = 9;
for (int i = 0; i < a.length; ++i) {
System.out.print(a[i] + " ");
}
System.out.println();
System.out.print("Grenze eingeben: ");
eingabe = stdin.readLine();
int x = Integer.parseInt(eingabe);
System.out.println("Ergebnis: " + countSums(a, x));
}
}
kann mir jemand helfen, auf den richtigen weg zukommen ???