S
Shimona di Blasi
Gast
Code:
public class orginal {
static int betrag[] = { 1, 2, 5, 10, 20, 50, 100, 200 };
// Muenz-Nummern : 0 1 2 3 4 5 6 7
static long Tab[][];
public static long w(int G, int i) { // auf wieviele Arten kann
// man den Betrag G mit Muenzen bis zur Nummer <= i herausgeben ?
return (G < 0) ? 0 : (i == 0) ? 1 : (Tab[G][ i] != 0) ? Tab[G][ i]
: (Tab[G][ i] = w(G, i - 1) + w(G - betrag[ i], i));
}
public static void main(String[] args) {
int G = Integer.parseInt(args[0]);
Tab = new long[G + 1][8];
System.out.println("Orginal:Den Betrag von " + G + " kann man auf " + w(G, 7)
+ " verschiedene Arten herausgeben.");
}
}
folgendes nicht all zu großes Programm habe ich. Es berechnet die Anzahl der Möglichkeiten Wechselgeld zurückzugeben.
Wenn ich es allerdings mit großen Zahlen starte, bekomme ich einen StackOverflow.
Ich weiss jetzt nicht genau .. kommt der StackOverflow dadurch, dass der ArrayIndex zu groß wird, oder kommt er daher, dass der Wertebereich long überschritten wird?
Zweiterem könnte man ja mit BigInteger entgegenwirken, da bin ich auch gerade dran. Ich versuche nur jetzt auch noch eine Alternative zu dem zweidimensionalen Array zu finden. Ein Ansatz währe mit einer HashMap. Nur ist eine HashMap leider nur eindimensional.
Darauf hin dachte ich, dass ich ein Array aus HashMaps machen kann, doch leider weiß ich nicht wie die Syntax dafür sein soll. Habe schon so gut wie alle Möglichkeiten dies zu erstellen versucht