|
发表于 2018-4-6 16:34:44
|
显示全部楼层
- '''
- 题目:找出斐波那契数列中包含0~9的连续10个数字。
- 斐波那契数列大家都很熟悉,1, 1, 2, 3, 5, 8, 13, 21, 34, 55......
- 如果把这些数量组成一个字符串就成为:'11235813213455',
- 这里面'2134'是包含1234这四个数字的,
- 继续下去可以找到第一个含有0~9这10个数字的地方(10个数字的次序随意),
- 可能处于一个斐波那契数,有可能跨越2个或多个斐波那契数,
- 现在要求你找到它,并打印出这十个数字,例如:9034621587
- '''
- #检测给定字符串是否合格
- def KO(s):
- for i in range(10):
- if str(i) not in s:
- return False
- return True
- n = 10
- b = True
- #为了提高效率,这里不用FB产生数列的项,而是用前面的产生后面的项
- a1 = 1
- a2 = 1
- strfb = "11"
- for i in range(1,5):
- a1, a2 = a2, a1 + a2
- strfb = strfb + str(a2)
-
- print(strfb)
- while b:
- for i in range(len(strfb)-9):
- if KO(strfb[i:i+10]):
- print(strfb[i:i+10])
- print("在", a2, "里找到的,是第", n, "项")
- b = False
- break
- if b:
- print(n, "接着找......")
- n += 1
- a1, a2 = a2, a1 + a2
- strfb = strfb[-9:] + str(a2)
复制代码 |
|