题目:
有n个小朋友从左到右站成一排,从1到n编号。
现在从最左边的小朋友开始从1开始报数,报到奇数的出列,然后剩下的人继续如此进行下去,直到只剩下一个人。
问最后剩下的那个人编号是什么。
第一行一个正整数t,表示有t组数据。
接下去t行,每行一个正整数n。
40%的数据,t<=10,1<=n<=100
80%的数据,t<=10,1<=n<=100000
100%的数据,t<=10,1<=n<=1000000000
输出t行,分别表示各个数据的最终结果。
2 6 10
4 8
算一下就会发现,总人数能除以几次二,最后剩下的人的号数就是2的几次方;
代码:
#include<iostream>
#define ll long long
using namespace std;
int main()
{
//freopen("num.in","r",stdin);
//freopen("num.out","w",stdout);
int t;
cin >> t;
while(t--)
{
ll n;
cin >> n;
ll x,y = 1;
n = n/2;
while(n)
{
y*=2;
n/=2;
}
if(t) cout << y << endl;
else cout << y;
}
return 0;
}