Ich habe diese einfache Methode für Sie geschrieben, einschließlich der Resource
-Klasse, die für das vorgesehene Beispiel verwendet worden ist.
private static class Resource {
private double value;
private int available;
public Resource(double value, int available) {
this.value = value;
this.available = available;
}
public void setValue(double value) {
this.value = value;
}
public double getValue() {
return this.value;
}
public void setAvailable(int available) {
this.available = available;
}
public int getAvailable() {
return this.available;
}
}
Methode, die die Zahlen auf dem Bildschirm druckt
public static void findNumbers(Resource[] availableResources, double targetNumber) {
// Keeps Track of which resource is currently in use.
int resourceInCheck = 0;
// Remainder of the wanted number
double remainder = targetNumber;
System.out.print("Values: ");
while(remainder > 0) {
if(remainder >= availableResources[resourceInCheck].getValue() && availableResources[resourceInCheck].getAvailable() > 0) {
System.out.print(availableResources[resourceInCheck].getValue() + ", ");
remainder -= availableResources[resourceInCheck].getValue();
availableResources[resourceInCheck].setAvailable((availableResources[resourceInCheck].getAvailable() - 1));
}
else {
resourceInCheck++;
}
}
}
Haupt Methode
public static void main(String[] args){
Resource firstResource = new Resource(5, 5);
Resource secondResource = new Resource(1, 8);
Resource thirdResource = new Resource(0.5, 7);
Resource[] availableResources = {firstResource, secondResource, thirdResource};
findNumbers(availableResources, 17.5);
}
Ausgabe
Values: 5.0, 5.0, 5.0, 1.0, 1.0, 0.5,
Auch dies ist eine mögliche Lösung die Eigenschaften passen dieses Problem, und natürlich gibt es andere Wege, um es anzugehen.
Hinweis:targetNumber
sollte <=
als die Summe aller verfügbaren Ressourcen sein.
Hinweis2: Array von Ressourcen muss von größeren zu kleineren Werten sortiert werden.
Was genau ist Ihre Frage? Holen Sie * alle * oder * die beste * Kombination? –
Wenn Sie die beste Kombination wünschen, erklären Sie, was in diesem Problem am besten bedeutet. Wenn es einfach alle möglichen Kombinationen ist, legen Sie einfach 3 verschachtelte Schleifen. – JackDaniels
kann es leicht gelöst werden mit Subset Sum Problem. –