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; }