Hallo und willkommen zu meinem 3. Thread wegen eines einzigen Projekts, ich hoffe Ihr seid so gnädig mich trotzdem zu unterstützen...
Dieser Algorithmus bereitet mir kopfzerbrechen:
Wie schonmal geschrieben musste ich erst einen Betrag in verschiedene Banknoten aufteilen (CH-Noten: 1000, 200, 100, 50, 20, 10). Dieser Algorithmus funktioniert, ich bekomme ein Array bei dem an der Stelle 0 die Anzahl Tausender stehen, an der Stelle 1 die Anzahl 200er usw.
Ich habe ausserdem den verfügbaren Bestand der Banknoten nach dem selben Schema in einem zweiten Array.
Was ich nun brauche ist ein Algorithmus, der die beiden Arrays vergleicht und, falls es von einer Note mal zu wenig haben sollte, diese auf andere Noten aufteilt. Tricky dabei ist ja, das die Noten nicht linear kleiner werden. Ausserdem kann man eine Note nicht nur in die nächstkleineren sondern im Falle von z.B. 2 50ern auch in die nächstgrösseren (1 100er) aufteilen.
Jetzt bin ich ziemlich ratlos... Meinen momentanen Stand findet ihr unten, aber das funktioniert so nicht immer richtig... :bahnhof:
Vielen Dank schonmal!
PS: Falls nötig bitte ins Matheboard verschieben, rein technisch gesehen ist es ja kein Java-spezifisches Problem.
Dieser Algorithmus bereitet mir kopfzerbrechen:
Wie schonmal geschrieben musste ich erst einen Betrag in verschiedene Banknoten aufteilen (CH-Noten: 1000, 200, 100, 50, 20, 10). Dieser Algorithmus funktioniert, ich bekomme ein Array bei dem an der Stelle 0 die Anzahl Tausender stehen, an der Stelle 1 die Anzahl 200er usw.
Ich habe ausserdem den verfügbaren Bestand der Banknoten nach dem selben Schema in einem zweiten Array.
Was ich nun brauche ist ein Algorithmus, der die beiden Arrays vergleicht und, falls es von einer Note mal zu wenig haben sollte, diese auf andere Noten aufteilt. Tricky dabei ist ja, das die Noten nicht linear kleiner werden. Ausserdem kann man eine Note nicht nur in die nächstkleineren sondern im Falle von z.B. 2 50ern auch in die nächstgrösseren (1 100er) aufteilen.
Jetzt bin ich ziemlich ratlos... Meinen momentanen Stand findet ihr unten, aber das funktioniert so nicht immer richtig... :bahnhof:
Vielen Dank schonmal!
PS: Falls nötig bitte ins Matheboard verschieben, rein technisch gesehen ist es ja kein Java-spezifisches Problem.
Java:
public class bestandsalgorithmus{
public static void main(String[] args){
int[] def_bestand = {0,1,200,1,1,1}; // Soviel von jeder Note ist vorhanden, atm also keine 1000er
int[] def_betrag = {1,1,1,1,1,1}; // Der Betrag, 1380 Fr.
int[] test = new int[def_bestand.length];
test = mtest(def_betrag, def_bestand);
for(int i=0; i < def_bestand.length; i++){
System.out.println(test[i]);
}
}
static int[] mtest(int[] arg_betrag, int[] arg_bestand){
int[] betrag = arg_betrag;
int[] bestand = arg_bestand;
for(int i=0; i < bestand.length; i++){
if(bestand[i] < betrag[i]){
int diff = betrag[i]-bestand[i];
bestand[i] = bestand[i]-(betrag[i]-diff);
System.out.println("test"+bestand[i]);
System.out.println("test"+betrag[i]);
switch(i){
case 0:
betrag[1] = betrag[1]+ 5*betrag[i];
break;
case 1:
betrag[2] = betrag[2] + 2*betrag[i];
break;
case 2:
betrag[3] = betrag[3] + 2*betrag[i];
break;
case 3:
if(betrag[i] % 2 == 0){
betrag[4] = betrag[4]+(5*betrag[i])/2;
}else{
betrag[4] = betrag[4] + ((5*betrag[i]) -1)/2;
betrag[5] = betrag[5] + 1;
}
break;
case 4:
betrag[5] = betrag[5] + 2*betrag[i];
break;
case 5:
if(betrag[5] >= bestand[5]){
}
break;
}
betrag[i] = betrag[i]-diff;
}
}
return betrag;
}
}