视频加载失败,请检查assets文件夹或下载MP4;正文和文字稿仍可独立阅读。
01
从 1 写到 234,数字出现多少次?
把正整数 1、2、…、234 按通常十进制写法各写一次。分别统计数字 2 与 0 的出现总次数。22 贡献两个 2;7 不写成 007。
第1步 / 共4步:先分开数位
百位2十位3个位4
上界是234。先统计个位,再统计十位和百位,最后相加。
当前演示 · 1到234
按位数
每一处数字归入它所在的数位
这是出现次数,不是含该数字的整数个数。分位后,每一处只属于一位,不重不漏。
02
学习准备与适用范围
学习目标
- 把数字出现总次数拆成各数位的贡献。
- 由高位、当前位、低位推导三种尾段情况。
- 解释零为什么不能直接套非零数字公式。
- 用前缀相减处理任意正整数区间。
必要前置
整数除法、商和余数、十进制位值、分类计数与区间端点。下文 ⌊x⌋ 表示不超过 x 的最大整数。
S班是本项目教学深度编排,不代表任何机构的官方分班课纲。本页只讨论有限的十进制正整数区间,整数均不补前导零。
03
完整周期+尾段:分段公式从哪里来
定义 F(N,d):从1到N(含端点),数字d出现的总次数,其中N是非负整数,d是0到9的整数,约定F(0,d)=0。N=0代表空区间,不把整数0写入统计。
固定一个数位 p
p依次取1、10、100、…,代表个位、十位、百位;只需检查p≤N的数位。把上界分成:
H=⌊N÷(10p)⌋,C=⌊N÷p⌋ mod 10,L=N mod p
H是当前位左边的高位,C是当前位数字,L是右边的低位。mod表示除法余数。例如N=1234,p=10时,H=12、C=3、L=4,且1234=12×100+3×10+4。
非零数字 d:H 个完整周期,每个贡献 p 次
暂把0到N的数补到同一长度。补出的前导零不会增加任何非零数字,所以统计d=1到9仍与通常写法一致。固定p位,每10p个连续整数形成一个周期,当前位为d的数连续出现p次。高位小于H的H个周期全部保留,先得Hp次。
最后一个不完整周期的高位为H。当前位若小于d,还没走到目标数字,补0次;若等于d,低位从0到L,补L+1次;若大于d,目标段已经完整走过,补p次。
固定 p 位的非零数字贡献 Ap(N,d)| 上界当前位 | 该位出现次数 | 尾段含义 |
|---|
| C<d | Hp | 尾段尚未到达d |
| C=d | Hp+L+1 | 低位0至L,两端都算 |
| C>d | Hp+p | 完整目标段全部进入 |
把各p位的贡献相加,就是F(N,d)。一个整数若在多位出现d,会分别贡献;题目要的是“含d的整数个数”时,不能直接用此和。
数字0:去掉最高位为空的那一整段
非零数字没有前导位问题,零则不同。固定p位时,高位H=0意味着该位若为零,就只能是前导零,所以该位贡献0。若H≥1,完整周期中高位为0的p个零是假零,需要删去,完整部分由Hp改成(H−1)p。
Ap(N,0)=0(H=0);
H≥1时:C=0,得(H−1)p+L+1;
H≥1时:C>0,得(H−1)p+p。
例如N=234,十位p=10:H=2、C=3、L=4,零的十位贡献(2−1)×10+10=20,对应100到109、200到209。不能把1到9虚写成01到09后也计入。
正整数区间 [a,b]
区间数字d次数 = F(b,d) − F(a−1,d)
条件是1≤a≤b,且a、b为整数。减掉的是1到a−1,必须保留a本身。公式不直接覆盖负数、小数、固定长度编号或包含整数0的题目;这些情形要先重新明确写法和计数范围。
04
两道完整例题
例题一 · 一题覆盖三种尾段
从1到1234,把每个正整数按通常十进制写法各写一次,数字1一共出现多少次?
- 个位p=1:H=123、C=4、L=0。C>1,贡献123×1+1=124次。
- 十位p=10:H=12、C=3、L=4。C>1,贡献12×10+10=130次。
- 百位p=100:H=1、C=2、L=34。C>1,贡献1×100+100=200次。
- 千位p=1000:H=0、C=1、L=234。C=1,贡献0+234+1=235次,正好对应1000到1234。
- 总次数124+130+200+235=689次。
补充对照C<d:若在相同上界统计数字3的百位,H=1、C=2<3,因此只有300到399的100次,尾段1200到1234不贡献百位3。C的比较对象必须是目标d,不是其他数位。
例题二 · 前导零修正与区间相减
把101到234之间的每个正整数(含101和234)各写一次,数字0共出现多少次?
- 先算F(234,0)。个位H=23、C=4,贡献(23−1)×1+1=23;十位H=2、C=3,贡献(2−1)×10+10=20;百位H=0,贡献0。合计43。
- 再算F(100,0)。个位H=10、C=0、L=0,贡献(10−1)×1+0+1=10;十位H=1、C=0、L=0,贡献(1−1)×10+0+1=1;百位H=0,贡献0。合计11。
- 区间相减:F(234,0)−F(100,0)=43−11=32次。
独立核对:101到234中,个位零是110、120、…、230,共13次;十位零在101到109共9次、200到209共10次。合计13+9+10=32。200贡献两个零,分别归入个位和十位。
05
迁移练习
本页例题与练习为自拟教学题。先列H、C、L,再选择对应分支。
练习一 · 尾段未到、相等、已过
从1到2024各写一次,数字2共出现多少次?
展开完整解析
个位:H=202、C=4>2,贡献202+1=203。十位:H=20、C=2、L=4,贡献20×10+4+1=205。百位:H=2、C=0<2,贡献2×100=200。千位:H=0、C=2、L=24,贡献24+1=25。
总次数203+205+200+25=633次。2022有三个2,它的三次贡献分别计入对应数位。
练习二 · 不从1起算的零
从100到1000(含两端),按通常十进制写法各写一次,数字0共出现多少次?
展开完整解析
F(1000,0):个位(100−1)×1+0+1=100;十位(10−1)×10+0+1=91;百位(1−1)×100+0+1=1;千位H=0,贡献0。合计100+91+1=192。
F(99,0):个位(9−1)×1+1=9;十位H=0,贡献0。因此区间总次数192−9=183次。独立核对:100到999共9个百段,每段个位零10次、十位零10次,合计180次;1000再贡献3个零,得183。
06
边界反例与回顾
为什么零不能用非零公式?
1到9中没有零。若错误套用d=0的非零公式,个位H=0、C=9>0,会得到1次,那其实数到了不在区间内的整数0。1到99若把十位补零,还会把01到09的9个前导零与00的假十位零算进去。必须先限制合法高位。
- 次数与个数不同:1到22中含2的数只有2、12、20、21、22,共5个;数字2却出现6次。
- 相等要加1:200到234共有234−200+1=35个数,不是34。
- 每位都重算H、C、L:它们随p变化,不能把十位的高位直接当百位高位。
- 零的修正先判H:H=0直接为0;不要让(H−1)p产生负次数。
- 区间减a−1:减F(a,d)会漏掉左端点a。
- 固定长度编号另议:001这种编号的前导零是真实字符,不能删掉;本页公式针对正整数通常写法。
解题顺序:明确写法和统计对象 → 固定数位p → 列H、C、L → 数完整周期与尾段 → 零作首位修正 → 各位相加 → 必要时区间相减。
07
逐章回看
文字稿默认展开,点击章节标题可定位播放时间。
从一写到二百三十四,数字二出现多少次?二十二含两个二,所以要按数位分别统计。
先看个位。每十个数里,个位二出现一次。二十三个完整周期,加上二百三十二,共二十四次。
再看十位。每一百个数有十个十位二。二十到二十九,一百二十到一百二十九,二百二十到二百二十九,共三十次。
百位只有二百到二百三十四,共三十五次。三位相加,二十四加三十加三十五,得八十九次。
换成数字零,要删去前导零。个位零有二十三次;十位零只在一百到一百零九、二百到二百零九,共二十次。
百位不能以零开头,所以零总共四十三次。求一百零一到二百三十四,只需减去一到一百的十一次,得到三十二次。
08
学习与图示说明
图中的数位格表示位置,轨道上的标记用于展示扫描进度,均不按数量比例绘制。正文分段公式依据十进制周期与区间分解自行推导;不把动画作为数学证明。
下载视频 · 下载完整离线包