计数与概率方法 · 方法讲解

数位统计法

先按位拆开,再数完整周期与尾段;数字零要排除前导位。

下载视频 ↗
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<dHp尾段尚未到达d
C=dHp+L+1低位0至L,两端都算
C>dHp+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一共出现多少次?

  1. 个位p=1:H=123、C=4、L=0。C>1,贡献123×1+1=124次。
  2. 十位p=10:H=12、C=3、L=4。C>1,贡献12×10+10=130次。
  3. 百位p=100:H=1、C=2、L=34。C>1,贡献1×100+100=200次。
  4. 千位p=1000:H=0、C=1、L=234。C=1,贡献0+234+1=235次,正好对应1000到1234。
  5. 总次数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共出现多少次?

  1. 先算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。
  2. 再算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。
  3. 区间相减: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的假十位零算进去。必须先限制合法高位。

解题顺序:明确写法和统计对象 → 固定数位p → 列H、C、L → 数完整周期与尾段 → 零作首位修正 → 各位相加 → 必要时区间相减。

07

逐章回看

文字稿默认展开,点击章节标题可定位播放时间。

从一写到二百三十四,数字二出现多少次?二十二含两个二,所以要按数位分别统计。

先看个位。每十个数里,个位二出现一次。二十三个完整周期,加上二百三十二,共二十四次。

再看十位。每一百个数有十个十位二。二十到二十九,一百二十到一百二十九,二百二十到二百二十九,共三十次。

百位只有二百到二百三十四,共三十五次。三位相加,二十四加三十加三十五,得八十九次。

换成数字零,要删去前导零。个位零有二十三次;十位零只在一百到一百零九、二百到二百零九,共二十次。

百位不能以零开头,所以零总共四十三次。求一百零一到二百三十四,只需减去一到一百的十一次,得到三十二次。

08

学习与图示说明

图中的数位格表示位置,轨道上的标记用于展示扫描进度,均不按数量比例绘制。正文分段公式依据十进制周期与区间分解自行推导;不把动画作为数学证明。

下载视频 · 下载完整离线包