Sometimes what looks simple is complex and what looks complex is simple. See if you can understand how this one calculates all the possible ways to give change for a certain amount of money given some kinds of coins. You MIT guys out there don't count, you probably have read the solution in the same book I have.
BTW: the code works with the LINQ May CTP ...
using System; using System.Collections.Generic; using System.Text; using System.Query; using System.Xml.XLinq; class Program { static void Main(string[] args) { var coins = new int[] { 1, 5, 10, 25, 50 }; var i = ChangeComb(100, coins); Console.WriteLine(i); } static int ChangeComb(int amount, IEnumerable<int> coins) { if (amount == 0) return 1; if (amount < 0) return 0; if (coins.Count() == 0) return 0; return ChangeComb(amount, coins.Skip(1)) + ChangeComb(amount - coins.First(), coins); } }