poj2309解题报告

来源:互联网 发布:淘宝销量查询 编辑:程序博客网 时间:2024/05/17 01:31

水题,每一层的二进制表达的最后几位都和左边的结点的最后几位相同(如果是奇数就直接打印),以此确定层数,相同主要是找规律,不过需要注意的就是c的各种位运算符,这次还是第一次用到,其次就是我找到了最小结点,竟然纠结半天怎么找最大结点~~给的那个根节点*2-最小结点=最大结点

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int main(){        int n,m;        scanf("%d",&n);        for(int i=0;i<n;i++)        {             scanf("%d",&m);             if(m%2==1)   {printf("%d %d\n",m,m);continue;}//是奇数,说明它是叶子结点             for(int i=1;i<=32;i++)             {                     if((m&1<<i)==1<<i)  {printf("%d %d\n",1+m-(1<<i),2*m-(1+m-(1<<i)));break;}//从小到上找到他的层数             }        }}


0 0
原创粉丝点击