//
// main.cpp
// 下落的小球
//
// Created by 张嘉韬 on 16/2/1.
// Copyright © 2016年 张嘉韬. All rights reserved.
//
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int main(int argc, const char * argv[]) {
int n,d,a[1000000],temp;
cin>>n>>d;
memset(a,0,sizeof(a));
for(int i=1;i<=pow(2,d)-1;i++)
{
if(i>pow(2,d-1)-1) a[i]=-1;
else a[i]=1;
}
for(int i=1;i<=n;i++)
{
temp=1;
while(a[temp]!=-1)
{
if(a[temp]==1) a[temp]=0,temp=2*temp;
else a[temp]=1,temp=2*temp+1;
}
}
cout<<temp<<endl;
return 0;
}
该题目是一道用数组来储存二叉树的典型题目,还可以进一步进行数学推理来简化计算过程
白书练习 下落的小球
最新推荐文章于 2023-07-03 19:39:30 发布