# HG changeset patch # User Eris Caffee # Date 1434755927 18000 # Node ID 10e1ce04c4f1a0d8c8171a12d34dff76d72cd7d9 # Parent eb159ea69f33efbcffdc8464031459fe7af7ec65 The Josephus program, ex 1.3.37 diff -r eb159ea69f33 -r 10e1ce04c4f1 algs4-c++/src/Josephus.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/algs4-c++/src/Josephus.cpp Fri Jun 19 18:18:47 2015 -0500 @@ -0,0 +1,55 @@ +#include +#include +#include +#include + +#include "Queue.hpp" + +void usage( char * name ) { + std::cerr << name << " skip size" << std::endl; + exit( EXIT_FAILURE ); + } + + +int read_int( char *s ) { + std::stringstream ss; + + ss.str( s ); + int tmp; + ss >> tmp; + if ( ss.fail() ) { + return -1; + } + return tmp; + } + +int main( int argc, char **argv ) { + + if ( argc != 3 ) { + usage( argv[0] ); + } + + int skip = read_int( argv[1] );; + int size = read_int( argv[2] ); + if ( skip == -1 || size == -1 ) { + usage( argv[0] ); + } + + + Queue q; + + for ( int i = 0; i < size; ++i ) { + q.enqueue( i ); + } + + int i = 0; + while ( q.size() ) { + int tmp = q.dequeue(); + if ( (i+1) % skip ) + q.enqueue( tmp ); + else + std::cout << tmp << std::endl; + ++i; + } + + }