跳转至

NOIP 2018 普及组 初赛 问题求解 第2题

题面求1到2018共有多少个包含数字8的数字

https://mp.weixin.qq.com/s/SdZClhvCv-e0CI1NnqC6uw

昍爸这篇文章中给出了四个数学非常重要的思想
1.枚举
2.分类计算
3.容斥
4.正难则反

方法一】:原始的枚举+归纳

0-99有19个含有数字8的数分别是8182838485868788081828384858687888998

类似地100-199200-299300-399400-499500-599600-699700-799900-999也都有19个包含8的数

而800-899则有100个包含8的数

因此0-999一共有19×9+100=271个数包含有数字8

同样的道理1000-1999也有271个数包含有数字8

最后20082018这两个数含有数字8

总计271×2+2=544


方法二】:分类计算

我们按照包含8的个数来分类我们先考虑0~1999内的数

只包含一个8由于8可以位于个位十位或百位千位只能是00就表示没有千位或1因此一共有3×9×9×2=486

恰好包含2个8由于8可以在个位十位或百位一共有C(3, 2)×9×2=54

包含3个8只有2个即888和1888

最后加上2008和2018一共有486+54+2+2=544


方法三】:容斥原理

记P1, P2, P3分别为1-2018之间个位十位和百位为8的数的个数 则有

P1=  202

P2 = 200

P3 = 200

P1P2=20P1P2表示个位和十位同时为8的xx88, 每100个有1个

P1P3=20,  P1P3表示个位和百位同时为8的x8x8, 每1000个有10个

P2P3=20P2P3表示十位和百位同时为8的x88x, 每1000个有10个

P1P2P3=2, P1P2P3表示个位十位百位同时为8x888, 共有2个

根据容斥原理满足要求的总计202+200+200-20-20-20+2=544


方法四】:正难则反

我们先求出0~1999里不含有数字8的数的个数

根据乘法原理千位有2种选择个位各有9种选择总计2×9×9×9=1458

所以0~1999中包含数字8的数有2000-1458=542

注意这里我们是按0-1999来算的一共有2000个数0也属于不包含数字8的1458个数中的一个。)

最后再加上2008和2018一共有544个