There is one problem which I wrote a program to solve, first in Java, then C++. I never kept interest in the problem long enough to see it through. One reason may be that it's more functional than procedural. I think that is what makes things tough, when you are solving something procedurally that would be more easily done functionally. There are other things like SuDoku you could solve in C++.
Are you familiar with Paint By Numbers? You could write a program that solves those. I know there is an algorithm, because I've done lots of them by hand. It has two components, a background, and a foreground. It is an M by N picture, where M and N are each divisible by 5. For each line in M and N, it gives you how many consecutive foreground pixels there are.
Wikipedia: Paint by Numbers has an example, however if you scroll down it looks like it has all the solution cases (don't look at those).
Java applet that lets users interactively solve PbNs.