养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

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

时间:2024-09-22 08:23:05

#include&l隋茚粟胫t;stdio.h>

#include<stdlib.h>

voidmain()

{

inty(intn,intm);

intp,q,r;

printf("请输入参选人的个数p和开始的位置q:\n");

scanf("%d%d",&p,&q);

r=y(p,q);

printf("最后那个人的初始位置是:%d\n",r);

}

inty(intn,intm)

{

inti,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];

returnl;

}

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

扩展资料:

大体思路如下:

read(a)

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

whilec<ado(b:=b*2,c:=b+c){超过目标时停止加数}

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

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

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

write(ans)

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

© 一点知识