如果序列中的所有数字都是由两位数( 8和9 )构成的,则称为可爱序列。。诸若此类。一个数字被称为美丽,如果它是可以被任何数字整除的,这是可爱序列的一部分。例如:8(可被8整除)、9(可被9整除)、889 (可被889整除)、10668 (可被889整除)是美丽的数字。给定一个数字,n,写一个代码打印“漂亮”(没有引号),如果它是可除以任何数字只包含8或9或两者,并打印-1否则。
这是我尝试过的python代码:
我使用了一个从8到n/2的for循环,我用regex来检查这个数字是否只包含8和9。这个代码对于较小的数字很好,对于更大的数字它给出的时间限制超过了!这个问题有什么有效的解决办法吗?
import re
n=int(input())
l="^[8-9]+$"
x=0
if re.match(l,str(n)):
print("beautiful")
else:
for i in range(8,int(n/2+1),1):
if re.match(l,str(i)) and n%i==0:
print("beautiful")
x=1
break
if x==0:
print(-1)发布于 2021-11-16 12:28:13
有一个函数可以生成具有指定最大长度的所有可爱数字:
from collections import deque
elements = ["8", "9"]
def all_cute_numbers(max_len):
prefixes = deque(elements)
while prefixes:
p = prefixes.popleft()
yield p
if len(p) < max_len:
for el in elements:
prefixes.append(p + el)
numbers = all_cute_numbers(3)
print(list(numbers))您可以循环它,并检查一些数字除以您的输入n
发布于 2021-11-17 12:33:50
n=int(输入(“输入数字"))
s = str(n)
print(len(s))
k = [] a = [8,9]
flag = 0 #通过在已经生成的数字中添加8和9来生成可爱的序列号
while True:x= (a*10) +8 a.append(x) y= (a*10) +9 a.append(y)
#检查生成的数字是否除以给定的数字
if (n%x==0)或(n%y==0)):n%y==0=1 print(“祝福”)中断if (len(str(y))>len(s)):k.append(a) a.pop(0)
打印(K)
if (flag==0):
print("-1") https://stackoverflow.com/questions/69988907
复制相似问题