Assuming picksToUse and timesToUse are exactly the same as you declared them, here’s a way to know if you have enough of everything in stock to “pay up”. It’s a boolean function, which uses recursion. You would call it with the amount needed as parameter, and it would tell you right there if you have enough of everything.
Private Function HasCashInStock(amount As Integer, Optional index As Integer = 0) As Boolean Dim billsNeeded As Integer = amount \ picksToUse(index) If billsNeeded > timesToUse(index) Then Return False End If amount -= picksToUse(index) * billsNeeded If amount = 0 Then Return True End If Return HasCashInStock(amount, index + 1) End Function
\ is an integer division operator (in VB.NET, at least – I’m shamelessly letting you translate this code). If you’re not familiar with the integer division operator, well, when you use it with integer it gets rid of the floating numbers.
3 / 2 is not valid on integers, because it would yield 1.5.
3 \ 2 is valid on integers, and will yield 1.
That’s all there is to it, really. Oh yeah, and recursion. I like recursion, but others will tell you to avoid it as much as you can. What can I say, I think that a nice recursive function has elegance.
You can also totally copy this function another time, modify it and use it to subtracts from your
timesToUse() array once you know for sure that there’s enough of everything to pay up.
If HasCashInStock(HereIsTheAmountAsInteger) Then GivesTheMoney(HereIsTheAmountAsInteger) End If
Having two functions is not the leanest code but it would be more readable. Have fun!