鱼C论坛

 找回密码
 立即注册
查看: 7113|回复: 60

[技术交流] Python:每日一题 206

[复制链接]
发表于 2018-9-10 10:37:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-9-11 20:43 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
斐波那契数中有些数字是可以被其各位数字之和整除的,例如:
144可以被1+4+4整除。
要求求出前10个这样的斐波那契数(不包括一位数1, 2, 3, 5, 8)。

游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-9-10 10:43:40 | 显示全部楼层
本帖最后由 塔利班 于 2018-9-10 10:51 编辑
  1. def fib():
  2.     a,b=8,13
  3.     while True:
  4.         a,b=b,a+b
  5.         if a%(sum(map(int,str(a))))==0:
  6.             yield a
  7. a=fib()
  8. for i in range(10):
  9.     print(next(a))
复制代码

点评

我写错了,应该是5  发表于 2018-9-10 10:46

评分

参与人数 2荣誉 +8 鱼币 +8 贡献 +3 收起 理由
mistperson + 5 + 5 + 3 真的是短小精悍
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 11:03:22 | 显示全部楼层
本帖最后由 凌九霄 于 2018-9-10 14:33 编辑
  1. def fibonacci(n):
  2.     if n > 0:
  3.         i, a, b = 0, 0, 1
  4.         while i < n:
  5.             a, b = b, a + b
  6.             i += 1
  7.         return a


  8. i, j = 7, 0

  9. while j < 10:
  10.     f = fibonacci(i)
  11.     t = eval('+'.join(str(f)))
  12.     if not f % t:
  13.         print(f)
  14.         j += 1
  15.     i += 1
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 11:17:31 | 显示全部楼层
  1. def a206(n):
  2.     a=1
  3.     b=2
  4.     while n:
  5.         c=a+b
  6.         s=str(c)
  7.         s2=sum([int(i) for i in s])
  8.         if c%s2==0 and c>10:
  9.             print(c)
  10.             n-=1
  11.         a=b
  12.         b=c   
  13.         
  14. a206(10)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 11:18:29 | 显示全部楼层
a,b,n=1,1,0
while n<10:
        b,a=a+b,b
        sumb=sum(int(x) for x in str(b))
        if b>10 and b%sumb==0:
                n+=1
                print(n,b)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 11:20:40 | 显示全部楼层
  1. def fib():
  2.     a,b = 0,1
  3.     while True:
  4.         a,b = b,a+b
  5.         yield a

  6. def my_filter(num):
  7.     total = 0
  8.     temp = num
  9.     while num:
  10.         total += num%10
  11.         num //= 10
  12.     if temp%total:
  13.         return False
  14.     else:
  15.         return True

  16. def fun206():
  17.     count = 0
  18.     for each_fib in fib():
  19.         if each_fib > 10 and my_filter(each_fib):
  20.             print(each_fib)
  21.             count += 1
  22.         if count == 10:
  23.             break

  24. if __name__ == '__main__':
  25.     fun206()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 11:32:01 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-10 11:50:51 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-10 11:52:27 | 显示全部楼层
  1. def get_num(num):
  2.     add = 0
  3.     while num != 0:
  4.         add += num%10
  5.         num = num//10
  6.     return add

  7. x,y,i = 5,8,0
  8. list1 = []
  9. while i <10:
  10.     x,y = y,x+y
  11.     z = get_num(y)
  12.     if y%z == 0:
  13.         i +=1
  14.         list1.append(y)
  15.         
  16. print(list1)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 12:01:03 | 显示全部楼层
  1. from functools import reduce

  2. class Feb:
  3.     def __init__(self):
  4.         self.a = self.b = 1
  5.         
  6.     def __iter__(self):
  7.         return self

  8.     def __next__(self):
  9.         while True:
  10.             self.a, self.b = self.b, self.a+self.b
  11.             if self.a > 10 and self.a%reduce(lambda x,y:x+y, map(lambda x:int(x), list(str(self.a)))) == 0:
  12.                 return self.a

  13. if __name__ == '__main__':
  14.     for feb in Feb():
  15.         print(feb)
  16.         input()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 12:41:22 | 显示全部楼层
  1. def feb():
  2.     a, b = 8, 13
  3.     while True:
  4.         yield b
  5.         a, b = b, a + b


  6. def fun206(n=10):
  7.     result = []
  8.     for each in feb():
  9.         if not each % (sum([int(x) for x in str(each)])):
  10.             result.append(each)
  11.         if len(result) == n:
  12.             break
  13.     return result


  14. print(fun206())
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 13:00:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-10 13:08:31 From FishC Mobile | 显示全部楼层
def feb(n):
        a,b = 0,1
        while b<n:
                yield b
                a,b=b,a+b
def find_feb(lst):
        return [i for i in lst if i > 9 and i%eval('+'.join(str(i))) == 0]
print(list(find_feb(feb(1 * 10**31))))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 13:22:23 | 显示全部楼层
我敲的小代码算出14930352后就不太行了,算不出后面的数了,所以先回复下,看看隐藏内容是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-10 13:32:50 | 显示全部楼层
本帖最后由 FC的注册很坑 于 2018-9-11 16:44 编辑
  1. def fab(n):
  2.     a=[]
  3.     for i in range(0,n):
  4.         if i==0:
  5.             a.append(1)
  6.         elif i==1:
  7.             a.append(1)
  8.         else:
  9.             a.append(a[i-1]+a[i-2])
  10.     return a[n-1]

  11. def zc(n):
  12.     st=str(n)
  13.     l=len(st)
  14.     sum=0
  15.    
  16.     for i in range(l):
  17.         sum+=int(st[i])
  18.     if n%sum==0:
  19.         return True
  20.     else:
  21.         return False

  22. count=7
  23. total=1
  24. while total<=10:
  25.     a=fab(count)
  26.     count+=1
  27.     if zc(a):
  28.         print(a,end=" ")
  29.         total+=1
复制代码
  1. # 时间复杂度为O(lg n)
  2. import numpy as np
  3. def fab(n):
  4.     k=np.array([[1,1],[1,0]])
  5.     a=np.array([[2,1],[1,1]])
  6.     for i in range(n-3):
  7.         a=a@k
  8.     return a[0][0]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 13:54:32 | 显示全部楼层
回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-10 14:10:19 | 显示全部楼层
本帖最后由 黑白、 于 2018-9-10 14:11 编辑
  1. def fabSum(num):
  2.     sum = 0
  3.     temp = num
  4.     while temp:
  5.         sum = sum + temp%10
  6.         temp //= 10
  7.     return sum

  8. def fun206(numMAX):
  9.     each,a,b = 0,8,13
  10.     while each < numMAX:
  11.         sum = fabSum(b)
  12.         if b%sum == 0:
  13.             yield b
  14.             a,b = b,a+b
  15.             each += 1
  16.         else:
  17.             a,b = b,a+b

  18. for each in fun206(10):
  19.     print(each)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 14:21:49 | 显示全部楼层
  1. import sys
  2. def fib():
  3.     a = 0
  4.     b = 1
  5.     while b:
  6.         yield b
  7.         a, b = b, a + b
  8. def change():
  9.     list1 = []
  10.     count = 0
  11.     for i in fib():
  12.         if len(list1) != 10:
  13.             if len(str(i)) <= 1:
  14.                 pass
  15.             else:
  16.                 for n in str(i):
  17.                     count += int(n)
  18.                 if i % count == 0:
  19.                     list1.append(i)
  20.                     count = 0
  21.                 else:
  22.                     count =0
  23.         else:
  24.             print(list1)
  25.             sys.exit()
  26. change()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 14:27:40 | 显示全部楼层
i = 10
a1 = 3
a2 = 5
a3 = 8
while i:
    while 1:
        a1 = a2
        a2 = a3
        a3 = a1 + a2
        temp = a3
        sum = 0
        while temp:
            sum = sum + (temp%10)
            temp //= 10
        if not a3 % sum:
            print (a3)
            i -= 1
            break

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-9-10 15:11:50 | 显示全部楼层
本帖最后由 raphael213 于 2018-9-10 15:51 编辑

a, b, i = 0, 1, 0
list = []
while(i<10):
    a, b = b, a+b
    if a >10:
        sum,temp = 0,a
        while temp:
            sum = sum + (temp % 10)
            temp //= 10
        if a % sum == 0:
            list.append(a)
            i += 1
print(list)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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