There are four types of common coins in   US   currency:

   quarters   (25 cents)
   dimes   (10 cents)
   nickels   (5 cents),   and 
   pennies   (1 cent) 


There are six ways to make change for 15 cents:

   A dime and a nickel 
   A dime and 5 pennies
   3 nickels
   2 nickels and 5 pennies
   A nickel and 10 pennies
   15 pennies


Task

How many ways are there to make change for a dollar using these common coins?     (1 dollar = 100 cents).



Optional

Less common are dollar coins (100 cents);   and very rare are half dollars (50 cents).   With the addition of these two coins, how many ways are there to make change for $1000?

(Note:   the answer is larger than   232).



References

 an algorithm from the book Structure and Interpretation of Computer Programs.
 an article in the algorithmist.
 Change-making problem on Wikipedia.


#!/usr/bin/awk -f
 
BEGIN {
    print cc(100)
    exit
}
 
function cc(amount, coins,    numPennies, numNickles, numQuarters, p, n, d, q, s, count) {
    numPennies = amount
    numNickles = int(amount / 5)
    numDimes = int(amount / 10)
    numQuarters = int(amount / 25)
 
    count = 0
    for (p = 0; p <= numPennies; p++) {
        for (n = 0; n <= numNickles; n++) {
            for (d = 0; d <= numDimes; d++) {
                for (q = 0; q <= numQuarters; q++) {
                    s = p + n * 5 + d * 10 + q * 25;
                    if (s == 100) count++;
                }
            }
        }
    }
    return count;
}
 