報數,思路

題目:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章