使用数组实现,一个为数据数组,一个为标记数组,用来标记数组中的元素是否已经弹出。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const len=5;
//用数组实现的约瑟夫环问题
int main()
{
int m=3,k=2;
char *p=new char[100];
char *head;
gets(p);
int da[100]={0},temp=0,i=0;
head=p;
while(*p!='\0')
{
if(*p==' ')
{p++;head=p;}
if(*p!=' ')
{
if(*(p+1)==' ')
{*(p+1)='\0';
sscanf(head,"%d",&temp);
da[i]=temp;
cout<<temp;
i++;
p=p+2;
head=p;}
else if(*(p+1)=='\0')
{sscanf(head,"%d",&temp);
da[i]=temp;
cout<<temp;
i++;
p++;}
else
{p++;
}
}
}
const int len=i;
int *d=new int[len],*flag=new int[len];
memset(flag,0,len*4);
for(int jj=0;jj<len;jj++)
d[jj]=da[jj];
int start=k-1,j=0,hashout=0;
while(true)
{
if(flag[start]==0)
{ j++;
if(j==m)
{
flag[start]=1;
cout<<d[start];
hashout++;
if(hashout==len)
break;
m=d[start];
j=0;
}
}
start++;
if(start==len)
start=0;
}
}