題目:
有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;
}