The keyword from your algorithms class is divide and conquer. The rest can be googled. http://wiki.answers.com/Q/There_are_12_bowling_balls_1_is_of_a_different_weight_than_the_others_find_out_which_one_it_is_in_3_steps
An abstract class can have abstract functions and those functions can have code in them. An interface is only method headers and no implementation. An abstract class cannot be an object because it is supposed to be general. If we were making an FPS game we could first have an abstract class called Gun and then have classes for AK-47 and RPG that would have their own specific implementations but would be a child of Gun. In this case we cannot make a "Gun" object because it is abstract and doesn't make sense to do so, you can however make an AK-47 object.
There is no right answer. Having been in this role for many years, I can only answer with what works well for me. I have spoken with many other people while traveling, about how they like to do it. In most cases, however, we all tend to agree that my travel plan is one that works well for themselves, too.
I went into my background and training and specifically went into Target Account Selling qualifying processes and how to not focus on selling technology... instead focus on business solutions. This could have gone completely south, but they had to admit that their technology strategy had been failing for years against Cisco.