手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

C语言中用数组解约瑟夫问题

时间:2024-10-14 15:05:03

#include<stdio.h>

#include<stdlib.h>

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<n;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<n;i++)

{

printf("%5d",b[i]);

}

printf("\n");

l=b[n-1];

return l;

}

C语言中用数组解约瑟夫问题

扩展资料:

大体思路如下:

①、read(a)

②、b:=1,c:=1{b为某一组的元素个数,c为累计所加到的数}

③、while c<a do (b:=b*2,c:=b+c){超过目标时停止加数}

⑥、c:=c-b{退到前一组}

⑦、x:=a-c{算出目标为所在组的第几个元素}

⑧、ans:=x*2-1{求出该元素}

⑨、write(ans)

参考资料:百度百科-约瑟夫问题

© 手抄报圈