http://acdream.info/problem?pid=1020
n个人围成一个圈报数,报到偶数的人退出,求最后一个人在一开始的位置。
看到数据能到100000000的级别,肯定是有规律的,可以将前100的情况通过暴力打表出来就能看到规律了。
#include<bits/stdc++.h>
using namespace std;
int main(){
long long int er[11111];
er[0]=1;
er[1]=2;
for(int i=2;i<=30;i++)
er[i]=er[i-1]*2;
long long int n;
while(cin>>n)
{
int i;
if(n==1)
{
cout<<"1"<<endl;
continue;
}
for(i=0;i<=30;i++)
{
if(n>er[i])
n-=er[i];
}
long long int ans=(n+n-1);
cout<<ans<<endl;
//cout<<er[30]<<endl;
}
return 0;
}