约瑟夫环问题即设有n个人坐成一个圈从某个人开始报数数到m的人出列接着从出列的下一个人开始重新报数数到m的人再出列如此循环直到所有人都出列为止最后按出列顺序输出代码如下
//从第start人开始计数以alter为单位循环记数出列总人数为total
publicint[]Jose(inttotalintstartintalter)
{
intjk=;
//count数组存储按出列顺序的数据以当结果返回
int[]count=newint[total+];
//s数组存储初始数据
int[]s=newint[total+];
//对数组s赋初值第一个人序号为第二人为依此下去
for(inti=;i<total;i++)
{
s[i]=i;
}
//按出列次序依次存于数组count中
for(inti=total;i>=;i)
{
start=(start+alter)%i;
if(start==)
start=i;
count[k]=s[start];
k++;
for(j=start+;j<=i;j++)
s[j]=s[j];
}
count[k]=s[];
//结果返回
returncount;
}