n个人围成一个圈,从第一个人开始编号(1,2,… ,n),从第一个人开始顺序报号1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表实现。
输入格式:
输入在一行中给出一个n,代表n个人围成一个圈(0<n<=100000)。
输出格式:
输出最后留在圈子中的人原来的序号,占一行。
输入样例:
10
输出样例:
4
#include<cstdio>
#include<iostream>
using namespace std;
int a[100100];
int main()
{
int i,n,N,t;
t=i=n=0;
while(cin>>N)
{
for(i=0; i<N; i++)
{
a[i]=1;
}
i=0;
while(t!=N-1)
{
if(a[i]==1)
{
n++;
}
if(n==3)
{
a[i]=0;
n=0;
t++;
}
i++;
if(i==N)
{
i=0;
}
}
for(i=0; i<N; i++)
if(a[i]==1)
{
cout<<i+1<<endl;
break;
}
}
return 0;
}