Java :: Aufgabe #239

2 Lösungen Lösungen öffentlich

Begleichung einer Rechnung ausschließlich mit Münzen

Anfänger - Java von hollst - 02.05.2019 um 15:46 Uhr
Angenommen, ihr hättet an der Kasse einen Betrag X zwischen (einschließlich) einem Cent und einem Euro zu bezahlen.

Schreibe ein Program, dass die Anzahl der Möglichkeiten berechnet, X ausschließlich mit 1, 2, 5 und 10 Cent-Münzen zu begleichen.

Beispiel: X = 5 Cent -> 4 Möglichkeiten (5; 2 + 2 + 1; 2 + 1 + 1+ 1; 1 + 1 + 1 + 1 + 1)

Achtung: für einen EURO (100 Cent) gibt es bereits 2.156 Möglichkeiten!

Viel Spaß!

Lösungen:

vote_ok
von Rattlesnake (150 Punkte) - 19.08.2019 um 17:20 Uhr
Quellcode ausblenden Java-Code
import java.util.Arrays;

public class Java_239 {

    public static long waysToPay(int[] coinValues, int numCoins, int valueToPay){
       //Tabelle speichert die Anzahl der Lösungen von i
        long[] table = new long[valueToPay+1];
        Arrays.fill(table,0);
        table[0] = 1;

        for (int i=0; i<numCoins; i++){
            for (int j=coinValues[i]; j <=valueToPay; j++){
                table[j] += table[j-coinValues[i]];
            }
        }
        return table[valueToPay];
    }

    public static void main(String[] args) {
        int arr[] = {1, 2, 5, 10};
        int m = arr.length;
        int n = 100;

        long counter = waysToPay(arr,m,n);

        System.out.println("Für den Betrag von " + n + " gibt es " + counter + " Möglichkeiten");
    }
}
vote_ok
von Fre011 (230 Punkte) - 27.08.2019 um 16:14 Uhr
Folgende Lösung geht wie im Beispiel davon aus, dass die Reihenfolge der Münzen keine Rolle spielt, dass somit (2 + 2 + 1; 2 + 1 + 2; 1 + 2 + 2) als eine Möglichkeit gezählt wird. Folglich gibt es für 100 Cent nur 71 Möglichkeiten. (Kleiner Widerspruch in der Aufgabenstellung, dort spielt bei den 100 Cent und 2.156 Möglichkeiten die Reihenfolge eine Rolle :) )
Quellcode ausblenden Java-Code
public class BetragX {
	
public static final int X = 100;

	public static void main(String[] args) {
		
		byte coin = 0;
		int possibilities = 1;
		
		for(int a = 0; a < X;) {
			
			int aRef = a;
			int possibilitiesRef = possibilities;
			
			switch(coin) {
			case 0:
				a += 10;
				possibilities += 7;
				break;
			case 1:
				a += 5;
				possibilities += 3;
				break;
			case 2:
				a += 2;
				possibilities += 1;
				break;
			case 3:
				a+= 1;
				break;
			}
			if (a > X) {
				a = aRef;
				possibilities = possibilitiesRef;
				coin++;
			}	
		}
		
	System.out.println(possibilities);
	
	}
}