当前位置:文档之家› 约瑟夫环--队列

约瑟夫环--队列

约瑟夫环问题(限1人)
【问题描述】设有编号为1,2,3……n的n个人顺时针方向围坐一圈,每人有一密码(正整数)。
开始时给出一报数上限m,从编号为1的人开始报数,报m的人出列;
以后将出列者的密码作为新的m,从顺时针方向紧挨着他的下一个人开始报数……直至所有人出列。
试编一算法,求出出列顺序。
【实现要求】
1、分别用顺序表和链表实现
2、从键盘输入n,m
3、各人的密码由计算机随机产生(可用random()函数)


#include
#include
void main()
{
int y(int n,int m);
int p,q,r;
printf("请输入参选人的个数p和开始的位置q:\n");
scanf("%d%d",&p,&q);
r=y(p,q);
printf("最后那个人的初始位置是:%d\n",r);
}
int y(int n,int m)
{
int i,j=0,s=0,l;
int *a=(int *)malloc(sizeof(int));
int *b=(int *)malloc(sizeof(int));
for(i=0;i{
a[i]=i+1;
}
a[n]=-1;
for(i=0;j!=n;i++)
{
if(a[i]==-1)
i=0;
if(a[i]!=0 && a[i]!=-1)
s++;
if(s==m)
{
b[j]=a[i];
a[i]=0;
j++;
s=0;
}
}
for(i=0;i{
printf("%5d",b[i]);
}
printf("\n");
l=b[n-1];
return l;
}

相关主题
文本预览
相关文档 最新文档