1 条题解
-
0
自动搬运
来自洛谷,原作者为

一只书虫仔
End.搬运于
2025-08-24 22:20:51,当前版本为作者最后更新于2020-08-07 19:54:41,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Description
定义由 和 组成的数为幸运数,求第 个幸运数。
Solution 1
只有 和 ?其实我们可以模拟成二进制数的,即求第 个二进制数,只不过 是 , 是 。
- 将 转化为二进制
- 如果是 输出 ,是 输出 ,比如 就输出
Code 1
#include <bits/stdc++.h> using namespace std; long long j, a[100000]; void erzhi (long long i) { while (i) { j++; a[j] = i % 2; i /= 2; } } void ans (long long k) { erzhi(++k); for (long long i = j - 1; i >= 1; i--) if (a[i] == 0) printf("4"); else printf("7"); } int main () { long long k; scanf("%lld", &k); ans(k); return 0; }Solution 2
我们也可以直接不用二进制,用一种类似递归的方式来。
比如我们看第 个幸运数,,是第 个幸运数加上一个 ,第 个幸运数又是第 个幸运数加上一个 ,这时候我们就可以发现一个规律,对于第 个幸运数,可以通过下面的公式得出(假设第 个幸运数是 )
$$a_k=a_{\left\lfloor\frac{k-1}{2}\right\rfloor}\times 10+d\begin{cases}d=4(k\bmod 2=1)\\d=7(k\bmod 2=0)\end{cases} $$初始化 。
然后就可以打一份递归的代码了,这里建议用字符串存储。
By Shuchong
2020.8.7
- 1
信息
- ID
- 5306
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者