Ciao,
mi sono messo qui e ho provato a buttarlo giù... Anziché postarti il codice (che sarebbe un po' inutile) ti do qualche suggerimento.
Intanto ho considerato due array
codice:
/* array con i tagli delle monete */
float monete[] = {2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
/* array con i numeri di "pezzi" per ogni moneta */
int scelte[] = {0, 0, 0 ,0, 0, 0, 0, 0};
Poi ho creato una funzione trovaMonete che prende in ingresso il prezzo e l'array "scelte". Questa funzione prova a vedere se qualche moneta "sta" nel prezzo (ad esempio nel prezzo di 1.54 € una moneta da 2 € non ci sta ma una da 1 € sì) e aumenta il contatore relativo. Infine... la magia della ricorsione!
Prova a vedere cosa riesci a fare e poi ne riparliamo.
PS. Questa è solo un'idea: sicuramente ci saranno anche altre strade, forse migliori.