Mercurial > Algorithms__Sedgewick
annotate algs4-c++/src/Josephus.cpp @ 17:10e1ce04c4f1
The Josephus program, ex 1.3.37
author | Eris Caffee <discordia@eldalin.com> |
---|---|
date | Fri, 19 Jun 2015 18:18:47 -0500 |
parents | |
children |
rev | line source |
---|---|
discordia@17 | 1 #include <algorithm> |
discordia@17 | 2 #include <cstdlib> |
discordia@17 | 3 #include <iostream> |
discordia@17 | 4 #include <sstream> |
discordia@17 | 5 |
discordia@17 | 6 #include "Queue.hpp" |
discordia@17 | 7 |
discordia@17 | 8 void usage( char * name ) { |
discordia@17 | 9 std::cerr << name << " skip size" << std::endl; |
discordia@17 | 10 exit( EXIT_FAILURE ); |
discordia@17 | 11 } |
discordia@17 | 12 |
discordia@17 | 13 |
discordia@17 | 14 int read_int( char *s ) { |
discordia@17 | 15 std::stringstream ss; |
discordia@17 | 16 |
discordia@17 | 17 ss.str( s ); |
discordia@17 | 18 int tmp; |
discordia@17 | 19 ss >> tmp; |
discordia@17 | 20 if ( ss.fail() ) { |
discordia@17 | 21 return -1; |
discordia@17 | 22 } |
discordia@17 | 23 return tmp; |
discordia@17 | 24 } |
discordia@17 | 25 |
discordia@17 | 26 int main( int argc, char **argv ) { |
discordia@17 | 27 |
discordia@17 | 28 if ( argc != 3 ) { |
discordia@17 | 29 usage( argv[0] ); |
discordia@17 | 30 } |
discordia@17 | 31 |
discordia@17 | 32 int skip = read_int( argv[1] );; |
discordia@17 | 33 int size = read_int( argv[2] ); |
discordia@17 | 34 if ( skip == -1 || size == -1 ) { |
discordia@17 | 35 usage( argv[0] ); |
discordia@17 | 36 } |
discordia@17 | 37 |
discordia@17 | 38 |
discordia@17 | 39 Queue<int> q; |
discordia@17 | 40 |
discordia@17 | 41 for ( int i = 0; i < size; ++i ) { |
discordia@17 | 42 q.enqueue( i ); |
discordia@17 | 43 } |
discordia@17 | 44 |
discordia@17 | 45 int i = 0; |
discordia@17 | 46 while ( q.size() ) { |
discordia@17 | 47 int tmp = q.dequeue(); |
discordia@17 | 48 if ( (i+1) % skip ) |
discordia@17 | 49 q.enqueue( tmp ); |
discordia@17 | 50 else |
discordia@17 | 51 std::cout << tmp << std::endl; |
discordia@17 | 52 ++i; |
discordia@17 | 53 } |
discordia@17 | 54 |
discordia@17 | 55 } |