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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值