c++ 计算第几位是1
时间: 2024-03-31 21:37:33 浏览: 129
C++计算圆周率源码.zip
这个问题可以使用数位DP的思想来解决。具体来说,可以用 $f[i][j][k]$ 表示考虑到第 $i$ 位,当前已经有 $j$ 个数位为 $1$,是否存在前导 $0$ 的状态下,前缀中出现 $k$ 次数字 $1$ 的方案数。
根据这个状态转移,可以写出如下的动态规划转移方程:
$$
f[i][j][k] = f[i-1][j][k] + f[i-1][j-1][k-1] + f[i-1][j-1][k] \times 9
$$
其中第一项表示当前位为 $0$ 的情况,第二项表示当前位为 $1$ 的情况,第三项表示当前位为 $2 \sim 9$ 的情况。
最终的答案就是 $f[n][m][m]$,其中 $n$ 是数字的总位数,$m$ 是要统计的数字 $1$ 的个数。
具体实现细节可以参考下面的代码实现:
阅读全文