SRETAN
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的更多相关文章
随机推荐
- ajax回调打开新窗体防止浏览器拦截有效方法
ajax回调打开新窗体防止浏览器拦截,就这么做! 问题剖析: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function click_fun(){ window ...
- Linux课程实践二:编译模块实现内核数据操控
一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...
- alhpa阶段回顾
说明:本次课程,大家按照我下面列出来的问题进行回顾和反思,总结alhpa阶段以来的得失.每个组都要回答这些问题.由组长或者组员来回答都可以.目的依然是让大家养成软工的一些习惯和思维方式. 1.最初的需 ...
- Erlang 从入门到精通(三) 改变工作目录
对于初学者来书,经常会碰到下面的错误: no such file or directoryerror 提示找不到文件,这时候就需要将文件放到工作目录下,或者直接修改工作目录到文件所在位置. 右键ERl ...
- X-Frame-Options 响应头
[X-Frame-Options 响应头] 参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
- 注解式开发spring定时器
1:spring 配置文件中增加这句 <task:annotation-driven/> 2:确保扫描程序能够扫描后 下面第3步骤的java类 <context:co ...
- PHP入门篇
一.PHP-什么是变量 变量是用于存储值的,我们命令服务器去干活的时候,往往需要产生一些数据,需要临时性存放起来,方便取用.我们也可以理解为,变量就像一个购物袋,我们可以用来装苹果.榴莲(当然也可以 ...
- JS---如何避免用户在请求时“猛击”
var isAjax=false;//是否正在执行ajax请求,此处表示不在拿数据 var getInfoByTrainCode=function () { if(isAjax) return;//如 ...
- 安卓开发 想要获取某个View的高度(我是在做滚动浮层的时候用到的)
1.activity中有个onWindowFocusChanged()方法,可以获取控件的大小,别的地方可能会调用过早导致获取不到实际的大小 @Override public void onWindo ...
- slim框架中防止crsf攻击时,用到的函数hash_equals
1.防止crsf攻击的最多解决方案就是 为每个请求生成一个唯一 token ,验证来源于客户端 HTML 表单产生的 POST等请求 . 2.这个token默认放在session中. slim框架源码 ...