Z tymi monetami to już trochę jaśniej się zrobiło.
Po pierwsze nie baw się zmiennymi rzeczywistymi tylko zamień wszystko na grosze:
double kwota;
cin >> kwota;
kwota *=100;
int grosze;
grosze = (int) kwota;
Po drugie:
Dzielisz grosze przez 20 i otrzymujesz liczbę 20-to groszówek (dzielenie całkowite).
ilosc_monet += grosze / 20;
natomiast reszta z tego dzielenia to pozostała kwota do rozmieniania:
grosze %= 20;
No i to samo robisz dla 10-cio, 5-cio, dwu i jedno groszówek,
Zwróć uwagę, że po ostatnim dzieleniu (przez 1) reszta ZAWSZE zostaje zero.