Vending machine change function
You still have a floating point problem
If you change your line to this input:
auto change = getChange(0.04, 0.03);

you will get the following output:
2, 0, 0, 0, 0, 0,

As you can see, it answers with 2 pennies instead of one.  The problem is with the line that you &quot;fixed&quot;:

// I had a floating-point problem here by computing cents = (M-P)*100;
// it took me a few minutes to figure it out
int cents = (int)(M*100) - (int)(P*100);


You did notice a problem with your floating point conversion but you came to the conclusion that it was the subtraction that was the problem.  The actual problem is that a floating point value of something like 0.03 can sometimes be slightly above or slightly below the actual value of 0.03.  In this case, it is slightly below.  When you convert this value to cents by using (int)(P*100), you end up converting something like 2.999999 to 2 instead of 3.
One way to avoid this problem is to round instead of truncate.  So you can change your line to this to fix the problem:
int cents = (int) (100*(M-P) + 0.5);