SRETAN (sretan.pas/c/cpp)

题目描述

4和7是幸运数字,输入k,输出第k个只含有4和7的数。

输入格式

一行一个数k

输出格式

一行一个数表示答案

样例输入

3

样例输出

44

数据范围与约定

1 <= k <= 10^9

分析:

个位上有2个,十位上有4个,百位上有8个…… 找出规律:2^n,我们要分析第n个是在哪一位上,当前面所有方案数大于k时,可以在当前位上查找。将当前位数div 2;若k大于它,则输出7,否则输出4,直到div 2=1时,输出所有的数。

代码实现:

program exam;

var

i,j:longint;

k,t,s1,a2:int64;

function
f(a,b:int64):int64;

var

t,y:int64;

begin

t:=1;

y:=a;

while b<>0 do

begin

if b and 1=1 then

t:=t*y;

y:=y*y;

b:=b shr 1;

end;

exit(t);

end;

procedure make(x,y:int64);

begin

if x div 2=1 then

begin

if y=2 then

write(7);

if y=1 then

write(4);

close(input);

close(output);

halt; 注意,一定要halt;如果exit,会继续递归,会产生多余的数。

end;

x:=x div 2;

if y>x then

begin

write(7);

y:=y-x;

make(x,y);

end;

if y<=x then

begin

write(4);

make(x,y);

end;

end;

begin

assign(input,'sretan.in');

reset(input);

assign(output,'sretan.out');

rewrite(output);

readln(k);

for i:=1 to 60 do

begin

t:=f(2,i+1)-2;

if t>=k then

begin

s1:=f(2,i)-2;

k:=k-s1;

a2:=f(2,i);

make(a2,k);

end;

if t>k then

break;

end;

close(input);

close(output);

end.

SRETAN的更多相关文章

随机推荐

  1. 使用myeclipse为java web项目添加SSH框架

    添加SSH框架时,要严格按照先Struts,再Spring,最后Hibernate.添加方法见下方: 第一步:添加Struts框架 请按照图示一步步认真执行,配置好struts才可以进行下一步 第二步 ...

  2. 向JSP页面输入信息

    /** * ajax responseTEXT write; * @param request * @param response * @param str */ public static void ...

  3. CentOS7安装问题及解决方案记录

    CentOS7系统已安装好: 一.我想要实现系统桌面化. 需要运行 yum 命令. 出现第一个error: 1.提示错误:can not find a valid baseurl 86_X64.... ...

  4. crc循环冗余校验

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误.它 ...

  5. winform空间批量控制

    第一版: private void RefreshControl(PanelEx panel, bool enabled, bool isClear) { ; i < panel.Control ...

  6. Flyweight(享元)--对象结构型模式

    1.意图 运用共享技术有效地支持大量细粒度的对象. 2.动机 Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们,而无需高昂的代价.flyweight是一个共享对象,它可以同时在多个场 ...

  7. SOCKS 5协议详解(转)

    笔者在实际学习中,由于在有些软件用到了socks5(如oicq,icq等),对其原理不甚了解,相信很多朋友对其也不是很了解,于是仔细研读了一下rfc1928,觉得有必要译出来供大家参考. 1.介绍: ...

  8. [题解]UVa 10891 Game of Sum

    在游戏的任何时刻剩余的都是1 - n中的一个连续子序列.所以可以用dp[i][j]表示在第i个数到第j个数中取数,先手的玩家得到的最大的分值.因为两个人都很聪明,所以等于自己和自己下.基本上每次就都是 ...

  9. 博弈论揭示了深度学习的未来(译自:Game Theory Reveals the Future of Deep Learning)

    Game Theory Reveals the Future of Deep Learning Carlos E. Perez Deep Learning Patterns, Methodology ...

  10. es6新特性(一)

    关于es6,阮一峰的<ECMAScript 6入门> http://es6.ruanyifeng.com/写的非常详尽,可以经常看看,这里是对这本书进行一个缩略,可能有误,欢迎大家纠正.