poj 2309

 http://poj.org/problem?id=2309
//找规律 可以看到每个根节点都可以将其在同一层的最左边的根节点整除,并且最大值为该节点加上最左边的节点值-1,最小值为
////为该节点减去最左边的节点值-1
1 #include <iostream>
 2 #include<cmath>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     long long  s[35];
 8    s[0] =1;
 9    for(int i=1;i<=31;i++)
10         s[i] = s[i-1]<<1;
11    int t,n;
12    cin>>t;
13    while(t--){
14     cin>>n;
15     if(n%2){
16         cout<<n<<" "<<n<<endl;
17         continue;
18     }
19     int j;
20     for(j=31;j>=0;j--)
21         if(n%s[j]==0)
22             break;
23     int bet = s[j]-1;
24     cout<<n-bet<<" "<<n+bet<<endl;
25 
26    }
27     return 0;
28 }
原文地址:https://www.cnblogs.com/Bang-cansee/p/3190568.html