Well I see that you will need to delete all the members until you are left with one.
So you will need to do this.
#include <iostream>
#include <list>
using namespace std;
int main() {
int n;//number of soldiers
int k;//number skipped between
cout << "Welcome to The Josephus Problem" << endl;
cout << "Please enter the number of soldiers in the army." << endl;
cin >> n;
cout << "Please enter the number to be skipped between sucessive executions." << endl;
cin >> k;
list < int > soldiers;
for ( int i = 0; i < n; i++ )
soldiers.push_back ( i + 1 );
list < int > :: iterator p;
p = soldiers.begin ();
while(soldiers.size()==1)
{
for ( int i = 0; i < k-1; i++ ) {
p++;
if ( p == soldiers.end() )
p = soldiers.begin ();
}
p = soldiers.erase ( p );
for ( p = soldiers.begin(); p != soldiers.end(); p++ ){
cout << *p;
}
}
system("pause");
return 0;
}
I dint check the code. But it should work.
Reputation Points: 673
Solved Threads: 125
Practically a Posting Shark
Offline 818 posts
since Mar 2008