小猴子下落

来源:互联网 发布:帝国时代2征服者 mac 编辑:程序博客网 时间:2024/04/29 08:28
#include <iostream>using namespace std;int main(){    int d,n,i,k;    while(cin>>d>>n && !(d==0 && n==0)){        k=1;        for(i=0;i<d-1;i++){   //共有n层            if(n%2){   //在每一层上,猴子往左走(n为奇数)                k=k*2;                n=(n+1)/2;            }            else{   //在每一层上,猴子往右走(n为偶数)                k=k*2+1;                n=n/2;            }        }        cout<<k<<endl;    }    return 0;}


总结:满二叉树上的小球下落问题。

对于二叉树的每棵树:左子树=它的根的2倍,右子树=它的根的2倍+1;

每走一层,n就变为原来的1/2;这里不好表达,不过按照代码去理解一下程序的整个流程就明白是什么意思了,很好理解。

还有就是这个题的数据不大,所以可以暴力直接解决。一直模拟整个步骤就行。








0 0
原创粉丝点击