#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;
}
扩展资料:
大体思路如下:
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)
参考资料: