C语言编程求解约瑟夫问题

来源:百度知道 编辑:UC知道 时间:2024/05/07 01:55:58
题目是:有N个小孩围成一圈,给他们从1开始依次编号。指定从第W个开始报数,报到第S个时该小孩出列,然后下一个小孩开始报数,任是报到第S个出列,如此重复,直到所有小孩都出列,求小孩出列的顺序。

约瑟夫环的问题,我给你一个,程序首先输入小孩子个数,然后输入W
首先输出每个小孩子的编号,然后输出出列的数序,最后输出留下的小孩的编号
#include<stdio.h>
int Josephus(int *Child,int n,int m);
void main()
{
int *allChild,j,k,l;
scanf("%d%d",&j,&k);
//cin>>j>>k;

if((allChild= new int[j])!=NULL)
{
for(l=0;l<j;l++)
{
printf("%d,",l+1);
//cout<<l+1<<",";
allChild[l]=l+1;
}
printf("\n");
//cout<<endl;
printf("%d",Josephus(allChild,j,k));
//cout<<Josephus(allChild,j,k);
}
}

int Josephus(int *Child,int n,int m)
{
int i=-1,j=0,k=1;
while(1)
{
for(j=0;j<m;)
{
i=(i+1)%n;
if(Child[i]!=-1)
j++;

}

if(k==n)
break;
//cout<<Child[i]<<","