#12296. 奇葩楼层
奇葩楼层
奇葩楼层(C语言二级 · 编程题)
时间限制: 5000 ms 内存限制: 65535 KB 分值: 20 分(建议)
问题描述:
几乎每个国家都有自己忌讳的数字,有的大楼在给楼层编号的时候,会刻意跳过含有不吉利数字的编号。比如中国人比较忌讳数字 4
,有的大楼就没有第 4
层、第 14
层等等,这样楼层的编号就会是 1
、2
、3
、5
、…… 即编号为 5
的楼层实际是第 4
层。那么在去掉了忌讳数字之后,最高楼层编号为 n
的大楼,实际上有多少层呢?
输入:
输入在一行中给出 2 个整数,依次为大楼最高层的编号 n
(1 < n ≤ 1000
),和某国人民忌讳的数字 d
(0 ≤ d ≤ 9
)。题目保证 n
中不包含 d
。
输出:
在一行中输出该大楼的实际楼层数。
样例输入:
50 4
样例输出:
36
解题思路:
- 输入:
n
表示楼层编号的最大值。d
是忌讳数字,这个数字出现在楼层编号中时,应该跳过。
- 核心问题:
- 我们需要找出楼层编号中不包含忌讳数字
d
的实际楼层数。
- 我们需要找出楼层编号中不包含忌讳数字
- 解决步骤:
- 遍历从 1 到
n
的每个楼层编号,检查该编号是否包含忌讳数字d
。 - 如果不包含,计数加一。
- 遍历从 1 到
- 输出:
- 输出不包含忌讳数字的楼层数量。
时间复杂度:
- 每个字符串最多检查一次相邻字符,最坏情况下需要对每个楼层进行字符串操作。每个字符串最多有
log10(n)
位,因此时间复杂度为O(n * log10(n))
。
空间复杂度:
- 空间复杂度为
O(1)
,只需要常数空间来存储变量。
样例输入:
50 4
样例输出:
36
解释:
- 楼层编号从 1 到 50,但忌讳数字是 4。因此,我们需要排除包含 4 的楼层编号,如 4、14、24、34、44。
- 剩下的楼层编号为:1、2、3、5、6、7、8、9、10、11、12、13、15、16、17、18、19、20、21、22、23、25、26、27、28、29、30、31、32、33、35、36、37、38、39、40、41、42、43、45、46、47、48、49、50。
- 共有 36 层楼符合条件。