要求
有n个人围成一圈,顺序排号。从第一个人开始报数,凡报到3的人退出圈子,编一个函数,求解最后留下的是原来的第几号的那位。(用指针实现)
代码
/*
* 该函数用来实现计算最后剩下的那一位
* n:围圈的人数
* 返回其编号
*/
int last_one(int n)
{
int k=-1;
int i,j,l=0;
int a[n];
for(i=0;i<n;i++)
{
a[i] = 0;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<3;j++)
{
if(a[l]==1)
{
j--;
l++;
if(l==n)
{
l=0;
}
continue;
}
if(j==2)
{
a[l]=1;
}
l++;
if(l==n)
l=0;
}
}
for(i=0;i<n;i++)
{
if(a[i]==0)
{
k = i+1;
break;
}
}
return k;
}
main函数
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",last_one(n));
return 0;
}
测试
测试输入
3
输出
2