There are many different kinds of problems that I've found interesting.

First there are those that are interesting because solutions use interesting techniques. For example the Hamming sequence is the list of positive integers whose only factors are 2, 3, and 5 (repeated any number of times. It starts off 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20... However it gets more sparse, for instance the 2999th Hamming number is 278,628,139,008. What is the 5000th number in the Hamming sequence? If you wish to see the techniques behind a solution discussed, read Infinite Lists in Perl.

Then there are problems that are fun because there are many possible solutions. An example was the person who had an array of positive integers and wanted to break the array into n columns of as close to the same length as possible. Note that the order does **not** change, you are only breaking up the list. See Puzzle: need a more general algorithm for where this was asked on another site, and many resulting attempts at solutions of different levels of efficiency. (The most efficient was in another thread at Re: Balance columns.)

There are problems that are fun because they look impossible. For example write an algorithm that will break a list of integers into two lists whose sums are as close to even as possible. It should always be right, and should be able to handle a list of 100 integers of size 1-500 in reasonable time on a PC. There is an obvious exponential solution that won't work. If you search, you will find that solving this implies a solution to the Partition Problem, which is NP complete. Yet, believe it or not, the problem as stated is solvable.

Then there are arbitrary constraints. See the many golf problems that are out there. To state a simple one, suppose we have two arrays. The first is an array of characters. The second is an array of words made out of those characters. If the first array defines some alphabet in order (it might not be sorted in ASCIIbetical order), write a function that takes references to both arrays and returns the second array in "alphabetical" order. See Golf: Arbitrary Alphabetical Sorting for a series of ever better solutions in Perl.