您的位置:首页 > 理论基础 > 数据结构算法

算法-【京东笔试】关于第K个幸运数(4和7)的算法

2016-09-06 11:16 190 查看
幸运数由4和7构成,幸运数按照从小到大的排列。可以发现这其实就是树的广度优先搜索。广度优先搜索到的节点与根节点(设为空值)的路径上组成的数就是按照从小到大读的。

本文想出一种较为直观的算法。第一步,求出树的深度;第二步,求出最后一行有多少元素。根据元素的奇偶性质可以判断父节点时4还是7 ,循环到顶 ;第三步,利用堆栈弹出即可。

现场很遗憾么有写出,希望以后谋定而后动,掌握好自己的节奏很重要!

#include<iostream>
#include<math.h>
#include<stack>
using namespace std;
int dep(int n)
{
int i=1;
while((pow(2,i+1)-2)<n)
{
i++;
}
return i-1;
}
int main()
{

int n;
while(cin>>n)
{
stack<int> ans;
int depth=dep(n);//求除最后一行的深度
int levelNumLast=n-(pow(2,depth+1)-2);
while(depth>=0)
{
if(levelNumLast%2==0)
{
ans.push(7);
}
else
{
ans.push(4);
}
levelNumLast=(levelNumLast+1)/2;
depth--;
}
while(!ans.empty())
{
cout<<ans.top();
ans.pop();
}
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息