Josephus' Circle
Here is my solution to the latest code contest from The Daily WTF Programming Praxis: Josephus’ Circle .
What I like about this solution is that it represents in code, how the problem is actually carried out in real life. The soldiers are counted off one by one.
Also, I just LOVE .Net generics!
static int Josephus ( int numSoldiers , int soldiersToSkip )
{
// create soldiers
List < int > Soldiers = new List < int >();
for ( int i = 0 ; i < numSoldiers ; i ++)
{
Soldiers . Add ( i );
}
// kill soldiers
int iSoldier = 0 ;
while ( Soldiers . Count () > 1 )
{
// skip ahead by the requested number of soldiers
iSoldier = iSoldier + soldiersToSkip ;
// if we've gone over, then wrap back around to the top
while ( iSoldier > Soldiers . Count ())
{
iSoldier -= Soldiers . Count ();
}
// kill the choosen soldier
Soldiers . RemoveAt ( iSoldier - 1 );
}
// return answer
return Soldiers [ 0 ] - 1 ;
}