鱼C论坛

 找回密码
 立即注册
查看: 3653|回复: 89

[已解决]Python:每日一题 323

[复制链接]
发表于 2020-2-4 18:23:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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。


欢迎大家一起答题!
最佳答案
2020-2-4 22:23:57
本帖最后由 TJBEST 于 2020-2-4 22:26 编辑

可能有点繁琐,但是结果应该没错
  1. def fun323(string):
  2.     M = len(string)
  3.     if M < 3:
  4.         return False
  5.     else:
  6.         for u0 in range(1,(M//3)+1):
  7.             for u1 in range(u0,((M - u0)//2)+1):
  8.                 num1 = string[0:u0]
  9.                 num2 = string[u0:(u0+u1)]
  10.                 if (len(num1) > 1 and num1[0]=='0') or (len(num2) > 1 and num2[0]=='0'):
  11.                     pass
  12.                 else:
  13.                     num1 = int(string[0:u0])
  14.                     num2 = int(string[u0:(u0+u1)])
  15.                     index = u0 + u1
  16.                     while index < M:
  17.                         temp = num1 + num2
  18.                         bits = len(str(temp))
  19.                         new = index + bits
  20.                         if new < M:
  21.                             if str(temp) == string[index:new]:
  22.                                 num1 = num2
  23.                                 num2 = int(string[index:new])
  24.                                 index = new
  25.                             else:
  26.                                 break
  27.                         elif new == M:
  28.                             if str(temp) == string[index:new]:
  29.                                 return True
  30.                             else:
  31.                                 break
  32.                         else:
  33.                             break
  34.                            
  35.                 num1 = string[0:u1]
  36.                 num2 = string[u1:(u0+u1)]
  37.                 if (len(num1) > 1 and num1[0]=='0') or (len(num2) > 1 and num2[0]=='0'):
  38.                     pass
  39.                 else:
  40.                     num1 = int(string[0:u1])
  41.                     num2 = int(string[u1:(u0+u1)])
  42.                     index = u0 + u1
  43.                     while index < M:
  44.                         temp = num1 + num2
  45.                         bits = len(str(temp))
  46.                         new = index + bits
  47.                         if new < M:
  48.                             if str(temp) == string[index:new]:
  49.                                 num1 = num2
  50.                                 num2 = int(string[index:new])
  51.                                 index = new
  52.                             else:
  53.                                 break
  54.                         elif new == M:
  55.                             if str(temp) == string[index:new]:
  56.                                 return True
  57.                             else:
  58.                                 break
  59.                         else:
  60.                             break
  61.     return False
复制代码


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-4 18:40:24 | 显示全部楼层
1199110209 这种也算吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 18:43:08 | 显示全部楼层
fan1993423 发表于 2020-2-4 18:40
1199110209 这种也算吗?


算。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 18:55:31 | 显示全部楼层
累加数可以干嘛用呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:05:43 | 显示全部楼层
112358 有点像那啥...
斐波拉契数列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 19:06:10 | 显示全部楼层
Vmtayvj 发表于 2020-2-4 19:05
112358 有点像那啥...
斐波拉契数列

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:09:30 | 显示全部楼层

感觉这一题好难啊......你竟然能编出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 19:09:57 | 显示全部楼层
一个账号 发表于 2020-2-4 19:09
感觉这一题好难啊......你竟然能编出来。

不难,才中等难度悬赏的题才叫难呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:11:26 | 显示全部楼层
zltzlt 发表于 2020-2-4 19:09
不难,才中等难度悬赏的题才叫难呢

悬赏的题是你不会做吧......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:17:23 | 显示全部楼层
  1. def f323(s):
  2.     def isinc(a,b,c):
  3.         t=str(int(a)+int(b))
  4.         if c==t:
  5.             return True
  6.         elif c.startswith(t):
  7.             return isinc(b,t,c[len(t):])
  8.         else:
  9.             return False
  10.     for i in range(1,len(s)//2+1):
  11.         for j in range(i+1,len(s)):
  12.             a,b,c=s[:i],s[i:j],s[j:]
  13.             if isinc(a,b,c):
  14.                 return True
  15.     return False
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 19:19:09 | 显示全部楼层

解答错误

输入:"1023"
输出:True
预期结果:False

多了个 0,因此不算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:24:14 | 显示全部楼层
zltzlt 发表于 2020-2-4 19:19
解答错误

输入:"1023"

011算不算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 19:24:33 | 显示全部楼层

算,0 + 1 = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:25:05 | 显示全部楼层
本帖最后由 塔利班 于 2020-2-4 19:30 编辑


改了
  1. def f323(s):
  2.     def isinc(a,b,c):
  3.         if (a[0]=="0" and len(a)>1) or (b[0]=="0" and len(b)>1):
  4.             return False
  5.         t=str(int(a)+int(b))
  6.         if c==t:
  7.             return True
  8.         elif c.startswith(t):
  9.             return isinc(b,t,c[len(t):])
  10.         else:
  11.             return False
  12.     for i in range(1,len(s)//2+1):
  13.         for j in range(i+1,len(s)):
  14.             a,b,c=s[:i],s[i:j],s[j:]
  15.             if isinc(a,b,c):
  16.                 return True
  17.     return False
复制代码

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
zltzlt + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 19:26:35 | 显示全部楼层

解答错误

输入:"101"
输出:False
预期结果:True

1 + 0 = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:27:50 | 显示全部楼层
zltzlt 发表于 2020-2-4 19:26
解答错误

输入:"101"

再看看,把a,b都处理了,开始想的不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 19:30:57 | 显示全部楼层

嗯,可以了,28 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:31:52 | 显示全部楼层
  1. def func(sz:str):
  2.     if len(sz)<3:
  3.         return False
  4.     if sz[0]=='0':
  5.         maxi=1
  6.     else:
  7.         maxi=(len(sz)-1)//2
  8.     for i in range(1,1+maxi):
  9.         p=int(sz[:i])
  10.         if sz[i]=='0':
  11.             maxj=1
  12.         else:
  13.             maxj=min(len(sz)-2*i,(len(sz)-i)//2)
  14.         for j in range(1,1+maxj):
  15.             q=int(sz[i:i+j])
  16.             a,b=q,p+q
  17.             pre=i+j
  18.             z,x=str(b),sz[pre:pre+len(str(b))]
  19.             while str(b)==sz[pre:pre+len(str(b))]:
  20.                 pre+=len(str(b))
  21.                 if pre==len(sz):
  22.                     return True
  23.                 a,b=b,a+b
  24.     return False
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:36:18 | 显示全部楼层
  1. def gene(a,b):
  2.     x = [str(a),str(b)]
  3.     for i in range(100):
  4.         x.append(str(int(x[-1])+int(x[-2])))
  5.     return ''.join(x)

  6. def create_list(n):
  7.     if n % 3 == 1:
  8.         max_number = (n+1)//3 + 1
  9.     elif n %3 == 2:
  10.         max_number = (n+2)//3 + 1
  11.     else:
  12.         max_number = (n)//3 + 1
  13.     x = []
  14.     for i in range(1,max_number):
  15.         for j in range(i,max_number):
  16.             x.append((i,j))
  17.     #print(x)
  18.     return x

  19. def check(x):
  20.     l = create_list(len(x))
  21.     all_possible = []
  22.     for i in l:
  23.         a = int(x[0:i[0]])
  24.         b = int(x[i[0]:i[0]+i[1]])
  25.         all_possible.append(gene(a,b))
  26.     for i in all_possible:
  27.         #print(i[:20])
  28.         if i.startswith(x):
  29.             return True
  30.     return False

  31. print(check('112358'))
  32. print(check('199100199'))
  33. print(check('112359'))
  34. print(check('199100198'))
复制代码

暴力战胜一切-----------------------------------------------------

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 19:56:55 | 显示全部楼层
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[i:i+j]
            print(s1)
            news=s[i+j:]
            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[len(str(int(s0)+int(s1))):]
                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"))
帮我也看看

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 16:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表