使用动态规划计算满足要求的数字---给定一个范围[l,r],求出这个范围内的满足要求的数字的个数

该博客介绍如何使用动态规划算法解决在给定范围内计算不包含特定数字的整数个数的问题。通过定义状态转移方程,避免使用禁止的数字,并提供了一种贪心统计的替代方法。代码实现包括了不同函数,如计算位数、包含禁止数字的计数等,最终计算出符合条件的数字总数。
摘要由CSDN通过智能技术生成

 

 。要求是:
这些数字不能包含某个数字n。例如,不能包含数字”1”时,那么数字22、32、4都符合要求,数字2314,1233不符合要求。

解答要求时间限制:1000ms, 内存限制:64MB

输入

输入一行l, r, n, 三个整数(1 <= l < r <= 1000000000, 0 <= n < 10)
表示范围为[l, r],不能包含数字n。

输出

输出一行一个整数,表示符合要求的数字的个数。

样例

输入样例 1 复制

1 20 2

输出样例 1

17

 

提示

设定dp[len][zero]表示要搞定len位,前面是否是前导0状态得到的数字个数,转移的过程只要不用题目中禁止的那个数字就可以了。另外也有一种贪心统计的方法,那样比较耗时,但也可以得出答案。

 

#include <iostream>
#include <cmath>

using namespace std;

// get number post number fg: 123 so return 3 
int get_post_num(long long value) {
    int post_num = 1;
    
    while (value / 10 > 0) {
        post_num ++;
        value /= 10;
    }
    return post_num

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值