gpt4 book ai didi

python - L和H之间的幸运数字怎么算?

转载 作者:行者123 更新时间:2023-12-03 20:52:34 27 4
gpt4 key购买 nike

我已经完成了一项编码游戏评估,但我无法通过一项有关幸运数字的挑战的所有测试。我需要帮助。

定义 :幸运数字是一个数字中包含 6 s 或 8 s 但不能同时包含两者的数字。
例如 1638666 是幸运数字。 234687 不是。

任务 : 打印 LH 之间的幸运数字。

约束 :

  • L < H
  • 内存:512MB
  • 时间:6 seconds

  • 这就是我所做的(我选择 Python 作为编程语言)

    def is_lucky(nbr):
    nbr = [*str(nbr)]
    if '6' in nbr and '8' in nbr:
    return False
    if '6' in nbr or '8' in nbr:
    return True
    return False

    n_lucky_number = 0
    for number in range(L, H + 1):
    n_lucky_number += is_lucky(number)
    print(n_lucky_number)

    由于超时,我未能通过 LH 很大(或两者之间的差距)的测试。
    L, H = 1, 1000000000000000000 L, H = 92871036442, 3363728910382456
    有人可以帮我优化我的代码吗?

    最佳答案

    6秒?这在 Python 中看起来真的很难,通常比 C、Java 等慢。尽管我还没有找到通过测试的方法,但有几个地方可以改进:
    1. is_lucky

  • nbr可以直接转换为str ,无需解压到list . str支持 in .
  • 使用数学计算中的事实,True==1 , False==0 .
    例如。 A 是 '6' in nbr , B 是 '8' in nbr :
    两者都为真,A+B=2一个为真,A+B=1两者都为假,A+B=0所以我们可以只检查A+B == 1。
    之前:

  • def is_lucky(nbr):
    nbr = [*str(nbr)]
    if '6' in nbr and '8' in nbr:
    return False
    if '6' in nbr or '8' in nbr:
    return True
    return False
    后:
    def is_lucky(nbr):
    nbr = str(nbr)
    return ('6' in nbr) + ('8' in nbr) == 1
    2. 循环
    如果号码现在已经检查 False ,我们可以改进它。
    如果最后一位数字小于 5,则递增 6-n%10。
    例如,311 不是幸运数字。所以当然 312~315 也不是,所以直接用 6-1=5 加到 316 就可以了。
    为什么不<6? 5 加 1 无论如何,所以我们不需要它:]
    前:
    n_lucky_number = 0
    for number in range(L, H + 1):
    n_lucky_number += is_lucky(number)
    print(n_lucky_number)
    后:
    number, s = L, 0
    while n <= H:
    x = is_lucky(number)
    n_lucky_number += x
    m = number % 10
    if not x and m < 5:
    number += 6-m
    else:
    number += 1
    print(n_lucky_number)

    关于python - L和H之间的幸运数字怎么算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62179319/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com