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

来源:互联网 发布:香港好玩吗 知乎 编辑:程序博客网 时间:2024/04/27 18:59

幸运数由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;}


0 0