博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZUST 2019111 悲伤数字(思维+二叉树)
阅读量:3897 次
发布时间:2019-05-23

本文共 1162 字,大约阅读时间需要 3 分钟。

【题意】

用4,9按大小构造数字序列a[]为[4,9,44,49,94,99....],定义499为1Z,输入k(1<=k<=1e8),输出第kZ个数字。

比如k=1,输出为第499个数字,99994944。

【题解】

因为只有4,9两个数字,我们很容易联想到0,1,从而想到二叉树。我们这样构造二叉树,结点X的左儿子的编号为0X,右儿子的编号为1X,以此类推,我们可以得到整棵树的编号。我们令根结点为1,那么就可以通过编号的奇偶性判断它是父亲的左儿子还是右儿子,并且得到父亲的编号。所以,我们可以轻而易举的从儿子推到根结点的第一个儿子为止,输出这条路径即可。

【代码】

#include 
using namespace std;typedef long long ll;int ans[105];int main(){ ll k; while(~scanf("%lld",&k)){ if(k==0) break; k=k*499+1; ll deep=1,x=2; while(x*2-1
0;i--) ans[i]=k%2,k/=2; for(int i=1;i<=deep;i++) if(ans[i]&1) printf("9"); else printf("4"); printf("\n"); } return 0;}

【题面】

Description

众所周知,每一年的下半学期是XCPC区域赛比较密集的时候,众多acmers在这个时候终于可以出去比赛惹。ZZL带着他的队友们去了冰城,然后发生了一系列悲伤的故事,从此这座城市又多了三个悲伤的人。。。ZZL回到学校后看到4,9这两个数字就会想起那些悲伤的故事,于是他把4,9这两个数字称为悲伤数字。一个整数是悲伤数字,当且仅当它的十进制表示只包含悲伤数字。定义499为1Z。现在让你给出从小到大第kZ个悲伤数字。

第1个的悲伤数字是4,第2个的悲伤数字是9,第三个的悲伤数字是44。

Input

输入包含多组,每行为一组数据,包含一个整数k(1 \leq k \leq 10^8)k(1≤k≤108)。

文件结束为0,单独占一行,无需对应输出。

Output

每组输出仅一行,为第kZ个的悲伤数字,行末无空格。

Sample Input 1 

1

Sample Output 1

99994944

Hint

样例解释:99994944为从小到大第499个悲伤数字

输入输出较大,请注意输入输出效率

Source

zust - 出题组:朱展乐

转载地址:http://ghfen.baihongyu.com/

你可能感兴趣的文章
java图书管理系统
查看>>
C#图书管理系统
查看>>
C#酒店管理系统
查看>>
你对ArrayList了解多少?
查看>>
《从Paxos到ZooKeeper分布式一致性原理与实践》学习知识导图
查看>>
Java基础面试题(一) (2020持续更新)
查看>>
JAVA人事管理系统
查看>>
Dubbo面试题(关注小R持续更新)
查看>>
JAVA仿微博系统(JAVA毕业设计含源码和运行教程)
查看>>
24BITBMP位图的文件结构及创建
查看>>
如何在自定义控件中获得width和height?
查看>>
Android UI开发专题之界面设计【基础API】
查看>>
ejarmaker: jar 、java类的加密工具
查看>>
配置NFS实现Linux服务器之间的文件共享
查看>>
PostgreSQL连接池pgbouncer的使用
查看>>
Kryo序列化进阶学习: 加密数据
查看>>
swift 3.0 数组赋值
查看>>
用C#通过888-TT打印中文标签
查看>>
sendmail 出现 My unqualified host name的解决办法
查看>>
彻底解决lazarus安装组件后烦人的编译时单元找不到的问题!
查看>>