greedy.c
Here is the reference solution for Problem Set 1, greedy.c
#include <cs50.h>
#include <stdio.h>
#include <math.h>
float GetAmount() {
int done = 0;
float amount = 0.0;
while (!done) {
printf("O hai! How much change is owed?\n");
amount = GetFloat();
if (amount >= 0.0) {
done = 1;
}
}
return amount;
}
int DollarsToCents(float dollars) {
return round(100.0 * dollars);
}
int BiggestCoinIn(int num_cents) {
if (num_cents >= 25) {
return 25;
} else if (num_cents >= 10) {
return 10;
} else if (num_cents >=5) {
return 5;
} else if (num_cents >=1) {
return 1;
} else {
return 0;
}
}
// Returns the number of coins needed to represent a non-negative number
// of cents.
int MinimumCoinsForAmount(int num_cents) {
int num_coins = 0;
while (num_cents > 0) {
int coin = BiggestCoinIn(num_cents);
num_coins++;
num_cents -= coin;
}
return num_coins;
}
int main(void) {
float num_dollars = GetAmount();
int num_cents = DollarsToCents(num_dollars);
int num_coins = MinimumCoinsForAmount(num_cents);
printf("%d\n", num_coins);
return 0;
}