动态规划算法练习——计数问题

 题目描述

给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。
例如,a=1024,b=1032,则 a 和 b 之间共有 9 个数如下:
1024 1025 1026 1027 1028 1029 1030 1031 1032
其中 0 出现 10 次,1 出现 10 次,2 出现 7 次,3 出现 3 次等等…

输入格式

输入包含多组测试数据*。
每组测试数据占一行,包含两个整数 a 和 b
当读入一行为 0 0 时,表示输入终止,且该行不作处理。

输出格式

每组数据输出一个结果,每个结果占一行
每个结果包含十个用空格隔开的数字,第一个数字表示 0 出现的次数,第二个数字表示 1 出现的次数,以此类推。

数据范围:0<a,b<100000000

 输入样例


1 10
44 497
346 542
1199 1748
1496 1403
1004 503
1714 190
1317 854
1976 494
1001 1960
0 0

输出样例

1 2 1 1 1 1 1 1 1 1
85 185 185 185 190 96 96 96 95 93
40 40 40 93 136 82 40 40 40 40
115 666 215 215 214 205 205 154 105 106
16 113 19 20 114 20 20 19 19 16
107 105 100 101 101 197 200 200 200 200
413 1133 503 503 503 502 502 417 402 412
196 512 186 104 87 93 97 97 142 196
398 1375 398 398 405 499 499 495 488 471
294 1256 296 296 296 296 287 286 286 24


题目详解

0~9所有数字出现的次数,简化:
=>一个位数字出现的次数
假设一i个DP函数
dp(b,x):1~b中,x出现的次数(每一位出现的次数,最后加起来)
dp(a-1,x):1~a-1中,x出现的次数,
return dp( b ,x ) - dp ( a - 1 , x ):a~b中,x出现的次数 0<=x<=9。

假设有个N =abcdefg,x=1
把他的每一位都拆开,先举一位的例子:
第四位1的个数,即abc1efg有多少个
分情况:左边高位,左边的情况应向右边的情况


根据左边分情况:
xxx 1 yyy 
一.. xxx<abc 
1右边可以随便取   =>  0<=xxx<=abc-1  =>   abc个数
2.                                0<=yyy<=999  =>  1000种情况
3.                  get()=abc    *     1000=10^3 power10()   个数,这些种情况
特殊:x=0时,
二.xxx=abc
1.求第四位为一
2. d:原来给定的a中的d,可能>,<,=
3. 根据原来d为多少分为三种情况 


2) d:nums[i]  1:x
nums[i]=x


x=0不能在首位,必须在次高位上

#include <iostream>
#include <vector>
using namespace std;
//比如_ _ _ x_ _ _
//那这个函数返回的就是 x 前面组成的数字是多少
//求[l,r] 组成的数字是多少int get(vector<int> nums,int l,int r)//return [l,r]的数{int res = 0;for (int i=l;i >=r;i--)// l是高位{res=res*10 +nums[i];}return res;}int power10(int x)//10^n:n个10相乘{int res=1;while(x--)res*=10;return res;}
int count(int n,int x)//返回1~n中x出现的次数
{if(!n) return 0;//n=0时返回0vector<int> nums;//把给的每个数都扣出while(n) nums.push_back(n%10),n/=10;int res=0;//x出现的次数n=nums.size();//重用变量//!!!for(int i=n-1-!x;i>=0;i--)//当x=0时,取反为1,就减一,回到次高位{//左边的情况只有 不在最高位的时候才有if(i<n-1){//如a b c _ _ _//get返回abc ,power返回10^3res+=get(nums,n-1,i+1)*power10(i);//写get()和power()//!!!0在次高位上首位填的是原来的数if(!x) res-=power10(i);}//右边的情况if(nums[i]==x) res+=get(nums,i-1,0)+1;else if (nums[i]>x) res+=power10(i);}return res;
}
int main()
{//ab不能同时为0,但可以有一个为0//a可能比b大int a,b;while (cin >> a >> b , a||b){if(a>b) swap(a,b);for(int i=0;i<=9;i++)cout<<count(b,i)-count(a-1,i)<<' ';//实现dp函数怎么写cout<<endl;}return 0;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691590.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS的列表和列表项 list.c文件详解

列表、列表项的定义以及初始化 列表相当于链表&#xff0c;列表项相当于节点&#xff0c;FreeRTOS中的列表相当于一个双向环形链表。 列表使用指针指向列表项。一个列表&#xff08;list&#xff09;下面可能有很多个列表项&#xff08;list item&#xff09;&#xff0c;每个…

【MySQL】基本操作

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;MySQL 目录 &#x1f449;&#x1f3fb;创建和删除数据库&#x1f449;&#x1f3fb;数据库编码集和数据库校验集校验规则对数据库的影响 &#x1f449;&…

泰迪智能科技大数据开发实训平台功能介绍

大数据开发实训平台是面向实训课和课后训练的编程实训平台&#xff0c;平台底层基于Docker技术&#xff0c;采用容器云部署方案&#xff0c;预装大数据相关课程教学所需的实训环境&#xff0c;拥有1主2从的Hadoop集群&#xff0c;还能够自主定制环境&#xff0c;并能够与实训管…

SSM【Spring SpringMVC Mybatis】—— Spring(一)

目录 1、初识Spring 1.1 Spring简介 1.2 搭建Spring框架步骤 1.3 Spring特性 1.5 bean标签详解 2、SpringIOC底层实现 2.1 BeanFactory与ApplicationContexet 2.2 图解IOC类的结构 3、Spring依赖注入数值问题【重点】 3.1 字面量数值 3.2 CDATA区 3.3 外部已声明be…

JeeSite V5.7.0 发布,Java快速开发平台,Vite5、多项重构重磅升级

JeeSite V5.7.0 发布&#xff0c;Java快速开发平台&#xff0c;Vite5、多项重构重磅升级 升级内容 新增 参数配置 IP 地址黑白名单过滤器动态参数 新增 侧边栏是否展开第一个菜单的开关 first-open 新增 AesTypeHandler 处理字段数据加密解密或脱敏 新增 JsonTypeHandler …

PCIE协议-2-事务层规范-Message Request Rules

2.2.8 消息请求规则 本文档定义了以下几组消息&#xff1a; INTx 中断信号电源管理错误信号锁定事务支持插槽电源限制支持厂商定义消息延迟容忍度报告&#xff08;LTR&#xff09;消息优化缓冲区冲洗/填充&#xff08;OBFF&#xff09;消息设备就绪状态&#xff08;DRS&#…

机器人系统ros2-开发实践06-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如&#xff0c;最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先&#xff0c;我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

EasyRecovery(易恢复) 使用测试及详细使用方法

你有没有因为数据丢失懊悔不已&#xff0c;EasyRecovery&#xff08;易恢复&#xff09;&#xff0c;来自美国拥有38年数据恢复的软件&#xff0c;只有收费版&#xff0c;重要事情说三遍&#xff0c;EasyRecovery 没有免费版&#xff0c;可以成功找回删除的部分文件&#xff0c…

璩静霸道言论引发百度风波随笔

从5月9日晚开始有关“百度副总裁璩静已从公司离职”的消息&#xff0c;仅两天时间就几乎布满互联网所有知名自媒体平台&#xff0c;可谓兹事体大&#xff0c;无异于互联网发生了一场八级地震&#xff0c;波及面之广&#xff0c;匪夷所思&#xff01; 百度截图 尽管笔者一直密切…

A Dexterous Hand-Arm Teleoperation System

A Dexterous Hand-Arm Teleoperation System Based on Hand Pose Estimation and Active Vision解读 摘要1. 简介2.相关工作2.1 机器人遥操作2.2 主动视觉&#xff08;Active Vision&#xff09; 3. 硬件设置4. 基于视觉的机器人手部姿态估计4.1 Transteleop4.2 Dataset 5. 主动…

【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制 TCP 重传超时重传快速重传 滑动窗口流量控制拥塞控制慢启动拥塞避免拥塞发生快速恢复 TCP 重传 TCP重传是当发送的报文发生丢失的时候&#xff0c;重新发送丢失报文的一种机制&#xff0c;它是保证TCP协议可靠性的一种机制。 TCP重传…

AJ65SBT2B-64DA 三菱CC-Link D/A转换模块

AJ65SBT2B-64DA 是将数字值(16位有符号BIN数据)转换为模拟值(电压或电流)的模块。 AJ65SBT2B-64DA参数说明&#xff1a;4通道&#xff1b;输入分辨率0~12000&#xff0c;-12000~12000&#xff0c;-16000~16000&#xff1b;输出DC-10~10V&#xff0c;DC0~20mA&#xff1b;转换速…