Python:每日一题 323
本帖最后由 zltzlt 于 2020-2-5 17:06 编辑今天的题目:
累加数是一个字符串,组成它的数字可以形成累加序列。
一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。
给定一个只包含数字 0 ~ 9 的字符串,判断给定的字符串是否是累加数。
说明:累加序列里的数不会以 0 开头(可能会是 0),所以不会出现 1,2,03 或者 1,02,3 的情况。
示例 1:
输入:"112358"
输出:True
解释:累加序列为: 1, 1, 2, 3, 5, 8。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8。
示例 2:
输入:"199100199"
输出:True
解释:累加序列为: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199。
{:10_298:}欢迎大家一起答题!{:10_298:} 1199110209 这种也算吗? fan1993423 发表于 2020-2-4 18:40
1199110209 这种也算吗?
算。 累加数可以干嘛用呢 112358 有点像那啥...
斐波拉契数列 Vmtayvj 发表于 2020-2-4 19:05
112358 有点像那啥...
斐波拉契数列
是{:10_256:} zltzlt 发表于 2020-2-4 19:06
是
感觉这一题好难啊......你竟然能编出来。 一个账号 发表于 2020-2-4 19:09
感觉这一题好难啊......你竟然能编出来。
不难,才中等难度{:5_109:}悬赏的题才叫难呢 zltzlt 发表于 2020-2-4 19:09
不难,才中等难度悬赏的题才叫难呢
悬赏的题是你不会做吧......{:10_256:} def f323(s):
def isinc(a,b,c):
t=str(int(a)+int(b))
if c==t:
return True
elif c.startswith(t):
return isinc(b,t,c)
else:
return False
for i in range(1,len(s)//2+1):
for j in range(i+1,len(s)):
a,b,c=s[:i],s,s
if isinc(a,b,c):
return True
return False 塔利班 发表于 2020-2-4 19:17
解答错误
输入:"1023"
输出:True
预期结果:False
多了个 0,因此不算 zltzlt 发表于 2020-2-4 19:19
解答错误
输入:"1023"
011算不算 塔利班 发表于 2020-2-4 19:24
011算不算
算,0 + 1 = 1 本帖最后由 塔利班 于 2020-2-4 19:30 编辑
zltzlt 发表于 2020-2-4 19:24
算,0 + 1 = 1
改了
def f323(s):
def isinc(a,b,c):
if (a=="0" and len(a)>1) or (b=="0" and len(b)>1):
return False
t=str(int(a)+int(b))
if c==t:
return True
elif c.startswith(t):
return isinc(b,t,c)
else:
return False
for i in range(1,len(s)//2+1):
for j in range(i+1,len(s)):
a,b,c=s[:i],s,s
if isinc(a,b,c):
return True
return False
塔利班 发表于 2020-2-4 19:25
改了
解答错误
输入:"101"
输出:False
预期结果:True
1 + 0 = 1 zltzlt 发表于 2020-2-4 19:26
解答错误
输入:"101"
再看看,把a,b都处理了,开始想的不对 塔利班 发表于 2020-2-4 19:25
改了
嗯,可以了,28 ms def func(sz:str):
if len(sz)<3:
return False
if sz=='0':
maxi=1
else:
maxi=(len(sz)-1)//2
for i in range(1,1+maxi):
p=int(sz[:i])
if sz=='0':
maxj=1
else:
maxj=min(len(sz)-2*i,(len(sz)-i)//2)
for j in range(1,1+maxj):
q=int(sz)
a,b=q,p+q
pre=i+j
z,x=str(b),sz
while str(b)==sz:
pre+=len(str(b))
if pre==len(sz):
return True
a,b=b,a+b
return False
def gene(a,b):
x =
for i in range(100):
x.append(str(int(x[-1])+int(x[-2])))
return ''.join(x)
def create_list(n):
if n % 3 == 1:
max_number = (n+1)//3 + 1
elif n %3 == 2:
max_number = (n+2)//3 + 1
else:
max_number = (n)//3 + 1
x = []
for i in range(1,max_number):
for j in range(i,max_number):
x.append((i,j))
#print(x)
return x
def check(x):
l = create_list(len(x))
all_possible = []
for i in l:
a = int(x])
b = int(x:i+i])
all_possible.append(gene(a,b))
for i in all_possible:
#print(i[:20])
if i.startswith(x):
return True
return False
print(check('112358'))
print(check('199100199'))
print(check('112359'))
print(check('199100198'))
暴力战胜一切----------------------------------------------------- def f323(s):
lenth=len(s)//2+1
for i in range(1,lenth):
s0=s[:i]
print(s0)
for j in range(1,lenth):
s1=s
print(s1)
news=s
print(s)
sum=0
while len(news)>=len(str(int(s0)+int(s1)))and news[:len(str(int(s0)+int(s1)))]==str(int(s0)+int(s1)):
news=news
s0,s1=s1,str(int(s0)+int(s1))
print(s0)
print(s1)
print(news)
sum+=1
print(sum)
if len(news)==0 and sum>0:
return True
return False
print(f323("12345657"))
帮我也看看