2023蓝桥杯python 组试题A:2023

题目:

请求出在 12345678 至 98765432 中,有多少个数中完全不包含 2023 。
完全不包含 2023 是指无论将这个数的哪些数位移除都不能得到 2023 。
例如 20322175,33220022 都完全不包含 2023,而 20230415,20193213 则
含有 2023 (后者取第 1, 2, 6, 8 个数位) 。(5分)

首先,我们可以发现 2023 这个数一定是八位数,且其中的数字不重复,因此只需要考虑这些数字有哪些,然后用计数法统计不包含这些数字的数的个数即可。具体做法如下:

首先求出 2023 这个数中包含的数字:
num = 2023
digits = set(str(num))
  # 将数字转为字符串,再取 set,这样只会保留不重复的数字

这里使用了 set() 函数将字符串转为集合,这样可以去重并且快速判断一个数字是否在集合中。
接下来,对于每个数,我们要检查它是否包含集合 digits 中的任何一个数字。我们可以将这个检查过程封装成一个函数:
def contains_digits(n, digits):
    """判断数字 n 是否包含集合 digits 中的任意一个数字"""
    return any(d in digits for d in str(n))

any() 函数可以依次检查迭代器中的每个元素是否为 True,如果有一个为 True,则 any() 函数的结果为 True。
然后,我们可以用一个循环遍历所有数字,统计不包含 digits 集合中的数字的数字的个数:
count = 0
for n in range(12345678, 98765433): # 注意要取到 98765432
    if not contains_digits(n, digits):
        count += 1
print(count)

这里使用了一个 not 运算符,用于判断 contains_digits(n, digits) 的结果是否为 False,即数字 n 是否包含集合 digits 中的任何一个数字。

最终,这个程序的输出就是满足题目条件的数字个数。

答案是:5487027

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁付豪

一起加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值