Dit lijkt mij gewoon een herhalende deling met rest?
Initieel is de rest gelijk aan het bedrag.
Herhaal
- Zoek de grootste valuta kleiner dan of gelijk aan de rest.
- Trek deze valuta (of een veelvoud) af van deze rest en onthoud hoeveel dit was.
Zolang de rest groter is dan (ongelijk is aan) 0.
Hierbij kun je ofwel aannemen dat het oorspronkelijke bedrag splitsbaar is of hier op controleren.
Wat ontbreekt in bovenstaande oplossing is dat je meervouden van een hoeveelheid kunt hebben.
Je hoeft niet meerdere iteraties uit te voeren om eenzelfde bedrag meerdere keren af te trekken. In elke iteratie kun je zo'n veelvoud in één keer verwerken.
De oplossing voor 480 zou 2x200 + 1x50 + 1x20 + 1x10 moeten zijn lijkt mij.
Omdat je elke hoeveelheid maar 1x inspecteert zou je in principe kunnen volstaan met enkel een for-loop mits het beginbedrag een veelvoud is van (de som van) de beschikbare valutagroottes.
@SanThe: waarom die extra while? Dit kan ook met mod en div? En $MuntenArray[$value] wordt nergens geinitialiseerd?
Het stukje script van @SanThe werkt goed.
Dank je.
[size=xsmall]Toevoeging op 14/10/2016 09:56:36:[/size]
@- SanThe -
Ik kwam nog iets tegen wat niet goed gaat, op prijzen als:
4.85
1.15
4.60 (geeft die ook aan als 4.6)
gaat het niet goed, misschien meer maar deze kwam ik tegen.
Zou je nog eens kunnen kijken hoe dit op te lossen is dat het wel goed gaat want verder werkt alles zoals ik graag wil.
Dit is uit de errorlog, en blijkbaar gaat het soms ook mis bij de 10?
[size=xsmall]Toevoeging op 16/10/2016 12:58:34:[/size]
Vraag aan Thomas:
"Dit kan ook met mod en div"
De modules operator MOD vind ik in PHP als "%".
Maar de divide operator DIV kan ik niet vinden.
In plaats daarvan wordt aangeraden de realdivide "/" (float in PHP) te gebruiken.
Dus om zeker te zijn van een integer als resultaat: floor($teller/$noemer).