# Help with algorithm

I got this algorithm for a function that solves Josephus algorithm. and I will like to translate it to c++.
In C langiage:

#include <stdio.h>
#include <stdlib.h>

int josef(int num, int skip)
{
char *vec;
int i;
int curPtr;
int numLive = num;

vec = (char *)malloc(num+1);
for(i=1 ; i<=num ; i++)
vec[i] = 1;

curPtr = 1;
while(numLive > 1)
{
i = 1;
while(i<skip)
{
curPtr++;
if(curPtr > num)
curPtr = 1;

if(vec[curPtr])
i++;
}

vec[curPtr] = 0;  /* KILL him*/

curPtr++;
if(curPtr > num)
curPtr = 1;

numLive--;
}

/* Find the one LIVE */
for(i=1 ; i<=num ; i++)
if(vec[i])
return(i);

return(-1);
}

What I have done so far in C++:

Jos(n,m)
for i=0 to n
{a[i]=i+1;}
while n>i  do
for i=0 to n
{
if( a[i]!=0)
{
count=count+1;
if (count==m)
{
a[i]=0;
count=0;
}
}
}

I'm I doing it okay?
what else do I need?
###### Who is Participating?

Commented:
The C code _IS_ C++ code.  So you can just use that.  however it can be made a little more "C++ish"  (Also it has a memory leak that this fixes.)

#include <stdio.h>
#include <stdlib.h>

int josef(int num, int skip)
{
char *vec = new char[num + 1];
int numLive = num;

for(int i=1 ; i<=num ; i++)
vec[i] = 1;

int curPtr = 1;
while(numLive > 1)
{
int i = 1;
while(i<skip)
{
curPtr++;
if(curPtr > num)
curPtr = 1;
if(vec[curPtr])
i++;
}

vec[curPtr] = 0;  /* KILL him*/
curPtr++;
if(curPtr > num)
curPtr = 1;
numLive--;
}

int RetVal = -1;

/* Find the one LIVE */
for(int i=1 ; i<=num ; i++)
if(vec[i])
{
RetVal = i;
break;
}

delete [] vec;
return (RetVal);
}
0

Author Commented:
josephus problem is related to the following. Begining with n people arranged in a circle. Starting with the first person, count continuosly around the circle removing every m-th person until only one remains.Example n=7 and m=3
1,2,3,4,5,6,7
1,2,4,5,6,7
1,2,4,5,7
1,4,5,7
1,4,5
1,4
4
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.