What I've found good is to register at Topcoder and then try doing some of the easy questions from the sample rooms. If you can do it yourself easily, then try giving it as a programming exercise during the interview.
Surprisingly, this weeded out a lot of our candidates. And if you talk to them about it afterwards, you can get an idea whether it was because of nerves, or that they just are clueless when it comes to programming.
Here is an example of an actual problem:
Problem Statement
You are climbing a staircase. The
staircase consists of some number of
flights of stairs separated by
landings. A flight is a continuous
series of stairs from one landing to
another. You are a reasonably tall
athletic person, so you can climb a
certain number of stairs in one
stride. However, after each flight,
there is a landing which you cannot
skip because you need to turn around
for the next flight (which continues
in the opposite direction).
You will be given the number of stairs
in each flight in a Integer() flights.
Element 0 of flights represents the
number of stairs in the first flight,
element 1 is the number of stairs in
the second flight, etc. You will also
be given an Integer stairsPerStride,
which is how many continuous stairs
you climb in each stride. If it takes
two strides to turn around at a
landing, return the number of strides
to get to the top of the staircase.
You do not need to turn at the top of
the staircase.
Definition Class: StairClimb
Method: stridesTaken
Parameters:
Integer(), Integer
Returns: Integer
Method signature: Public Function
stridesTaken(flights() As Integer,
stairsPerStride As Integer) As Integer
(be sure your method is public)
Constraints flights has between 1 and
50 elements, inclusive.
Each element
of flights is between 5 and 30,
inclusive. stairsPerStride is between
2 and 5, inclusive.
Examples
{15}
2
Returns: 8
A simple
staircase with 15 steps. In 7 strides,
you've climbed 14 steps. However, you
still have one step left, so you must
use an additional stride to get to the
top.
{15,15}
2
Returns: 18
This time,
there are two flights with a landing
in between. 8 strides to get to the
first landing, 2 strides to turn
around, and 8 more strides to get to
the top makes 8+2+8=18 strides.
{5,11,9,13,8,30,14}
3
Returns: 44