鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-9-11 17:12:07 | 显示全部楼层
  1. def fab():
  2.     a, b = 5, 8
  3.     while True:
  4.         a, b = b, a + b
  5.         yield b

  6. def main():
  7.     num = fab()
  8.     count = 0
  9.     while count < 10:
  10.         next_num = next(num)
  11.         next_num_sum = sum([int(i) for i in str(next_num)])

  12.         if next_num % next_num_sum == 0:
  13.             print(next_num)
  14.             count += 1

  15. if __name__ == '__main__':
  16.     main()
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 18:41:29 | 显示全部楼层
本帖最后由 龙战yl天下 于 2018-9-11 18:43 编辑

import copy
i = 1
n=0
num1 = 5
num2 = 8
while n < 10:
    num3 = num2 + num1
    #print ('num3=',num3) #斐波那契数
    x=copy.copy(num3) #求各位之和
    s=len(str(x))
    h=0
    sum=0     #sum表示各位之和
    sz=[]
    while h<s:
        sz = sz + [x//(10**(s-h-1))]
        x=x-sz[h]*(10**(s-h-1))
        sum+=sz[h]
        h+=1
    e = num3 % sum      #判断能否被整除
    if e==0:
        print (num3)
        n=n+1
        print('n=',n)
    i += 1
    num1 = num2
    num2 = num3


答案:
21
n= 1
144
n= 2
2584
n= 3
14930352
n= 4
86267571272
n= 5
498454011879264
n= 6
160500643816367088
n= 7
114059301025943970552219
n= 8
5358359254990966640871840
n= 9
555565404224292694404015791808
n= 10

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 21:08:54 | 显示全部楼层
def fib(value=1):   
    if value % sum_iter(value)==0 :
        print(value)
   
   
def sum_iter(value):
        iters=[]
        n=len(str(value))
        print(value)
        for each in range(len(str(value))):
            step=n-each-1
            iters.append(int(value/(10**step)))
            value=value-(int(value/(10**step))*(10**step))
        print(iters)
        return sum(iters)
def fibs(value):
    if value % sum_iter(value)==0:
        return value
    else:
        False
   
value=9
n=10
fibss=[]
while True:
    value+=1
    print(value)
    if fibs(value) :
        fibss.append(value)
        n-=1
    elif n==0:
        break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 21:20:06 | 显示全部楼层
  1. # encoding: utf-8


  2. #斐波那契数中有些数字是可以被其各位数字之和整除的,例如:
  3. #        144可以被1+4+4整除。
  4. #        要求求出前10个这样的斐波那契数(不包括一位数1, 2, 3, 5, 8)
  5. def getSum(number):
  6.         sum = 0
  7.         while number >= 1:
  8.                 sum = sum + number % 10
  9.                 number = number // 10
  10.         return sum

  11. def isGood(n1, n2):
  12.         if n1 % n2 == 0:
  13.                 return True
  14.         else:
  15.                 return False
  16. i = 0
  17. f1 = 1
  18. f2 = 1
  19. result= []
  20. while i < 10:
  21.         f3 = f1 + f2
  22.         f1, f2 = f2, f3
  23.         if f3 > 10:
  24.                 t = getSum(f3)
  25.                 if isGood(f3, t):
  26.                         result.append(f3)
  27.                         i = i + 1
  28. print(result)
复制代码

答案:
[21,
144,
2584,
14930352,
86267571272,
498454011879264,
160500643816367088,
114059301025943970552219,
5358359254990966640871840,
555565404224292694404015791808]
为什么你们的代码都这么简洁的,好羡慕
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 21:32:41 | 显示全部楼层
def f206(n):
    def creat_num(m):
        a, b = 1, 0
        for i in range(m):
            a ,b = a+b ,a
        return a
        
        
    result = []
    m = 0
    while len(result) < n:
        m += 1
        temp = creat_num(m)
        if temp >10:
            temp_a = 0
            for i in str(temp):
                temp_a += int(i)
            if temp % temp_a == 0:
                result.append(temp)
    return result
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 21:47:44 | 显示全部楼层
本帖最后由 子沙 于 2018-9-11 21:54 编辑
  1. def fun_206(num):
  2.     x1,x2=1,1
  3.     x1,x2=x2,x1+x2
  4.     num1=0
  5.     while num1<num:
  6.         x1,x2=x2,x1+x2
  7.         if len(str(x2))>=2:
  8.             if x2%sum(list(map(lambda x:int(x),list(str(x2)))))==0:
  9.                 print(x2)
  10.                 num1+=1
  11. fun_206(10)
复制代码


运行结果如下:

  1. 21
  2. 144
  3. 2584
  4. 14930352
  5. 86267571272
  6. 498454011879264
  7. 160500643816367088
  8. 114059301025943970552219
  9. 5358359254990966640871840
  10. 555565404224292694404015791808
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 22:26:40 | 显示全部楼层
  1. #斐波那契数中有些数字是可以被其各位数字之和整除的,例如:
  2. # 144可以被1+4+4整除。
  3. # 要求求出前10个这样的斐波那契数(不包括一位数1, 2, 3, 5, 8)。


  4. # 666 -> 6+6+6 = 18  获取各位之和
  5. def aliquot(num):
  6.         temp = 0
  7.         for i in range(len(str(num))):
  8.                  temp += int(str(num)[i])
  9.         return temp

  10. # 1,1,2,3,5,8,13,21...
  11. def fibsNum():
  12.         a = 0
  13.         b = 1
  14.         num_list = []
  15.         while True:
  16.                 a,b = b,a+b
  17.                 if a > 10:
  18.                        div = aliquot(a)
  19.                        if a%div == 0:
  20.                                 num_list.append(a)
  21.                                 if len(num_list) == 10:
  22.                                         return num_list




  23. print(fibsNum())
复制代码


真是没想到,这后面的几个数这么大!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-9-12 11:30:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-13 20:51:54 From FishC Mobile | 显示全部楼层
z
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-13 22:34:04 | 显示全部楼层
n:每日一题 206 [修改]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-14 07:45:42 From FishC Mobile | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-9-14 11:03:43 | 显示全部楼层
"""
斐波那契数列中有些数字可以 被其他各位数字之和整除的,求前十个,除(1,2,3,5,8),用三重双引号
"""
def snum(n):
    if n < 10:
        return n
    else:
        return n%10 + snum(n//10)

fa = 5
fb = 8
count = 0
while count < 10:
    fc = fa + fb
    fa = fb
    fb = fc
    if fc%snum(fc) == 0:
        count += 1
        print('第{0}个是{1}'.format(count,fc),end='\t')
        if count%4 == 0:
            print()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-14 14:30:52 | 显示全部楼层
  1. # 斐波那切数列 c=a+b
  2. def fibonacci():
  3.     a = 1
  4.     b = 0
  5.     ailquot = 0
  6.     n = 0
  7.     fibo_sequence = []
  8.     fibo_divisible_number = []
  9.     while n<10:
  10.         c = a+b
  11.         b = a
  12.         a = c
  13.         fibo_sequence.append(c)
  14.         if len(str(c)) > 1:
  15.             t = sum([int(i) for i in str(c)])
  16.             if c%t == 0:
  17.                 fibo_divisible_number.append(c)
  18.                 n += 1
  19.     return fibo_sequence,fibo_divisible_number
  20. print(fibonacci())
复制代码

结果:
fibo_divisible_number:[21, 144, 2584, 14930352, 86267571272, 498454011879264, 160500643816367088, 114059301025943970552219, 5358359254990966640871840, 555565404224292694404015791808]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-12 11:11:41 | 显示全部楼层
[code]# -*- coding:utf-8 -*-
list_fib=[]
def fib_fun(n):
    i,a,b=0,1,1
    list_fib.append(a)
    while True:
        a,b=b,a+b
        i+=1
        list_fib.append(a)
        if i==n-1:
            break
    return list_fib
fib_fun(200)
i_str =""
sum=0
list_divd=[]
num=0
for i in list_fib:
    if i>10:
        i_str=str(i)
        for j in i_str:
            j=int(j)
            sum+=j
        if (i%sum)==0:
            list_divd.append(i)
            num += 1
            if num == 10:
                break
    sum=0
for i in list_divd:
    print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-15 21:42:10 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-17 09:44:03 | 显示全部楼层

这么多答案中,我看到的最pythonnic的,特别是map这个函数的写法。&#128077;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 16:35:24 | 显示全部楼层
为了节省程序运行时间,斐波那契数就别再调用函数了,那样会多出很多次重复运算,直接在主程序中这样写,相当于只调用了一次斐波那契,而不是每进行一次while循环,就调用一次。
  1. def mysum(num):
  2.         result=0
  3.         while num:
  4.                 result+=num%10
  5.                 num=num//10
  6.         return result

  7. i,x1,x2=1,8,13
  8. while i<=10:
  9.         if x2%mysum(x2)==0:
  10.                 print('第%2d个数是%d' %(i,x2))
  11.                 i+=1
  12.         x1,x2=x2,x1+x2
复制代码

结果:
  1. 第 1个数是21
  2. 第 2个数是144
  3. 第 3个数是2584
  4. 第 4个数是14930352
  5. 第 5个数是86267571272
  6. 第 6个数是498454011879264
  7. 第 7个数是160500643816367088
  8. 第 8个数是114059301025943970552219
  9. 第 9个数是5358359254990966640871840
  10. 第10个数是555565404224292694404015791808
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-17 22:04:57 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2019-8-17 22:05 编辑

不加限制算出来好多……
(部分结果)
  1. 21
  2. 144
  3. 2584
  4. 14930352
  5. 86267571272
  6. 498454011879264
  7. 160500643816367088
  8. 114059301025943970552219
  9. 5358359254990966640871840
  10. 555565404224292694404015791808
  11. 1226132595394188293000174702095995
  12. 18547707689471986212190138521399707760
  13. 107168651819712326877926895128666735145224
  14. 280571172992510140037611932413038677189525
  15. 619220451666590135228675387863297874269396512
  16. 64202014863723094126901777428873111802307548623680
  17. 271964099255182923543922814194423915162591622175362
  18. 6656593304481317393598839952151746590023553382130993248
  19. 263621064469290555679241849789653324393054271110084140201023
  20. 690168906931029935139391829792095612517948949963798093315456
  21. 137347080577163115432025771710279131845700275212767467264610201
  22. 23041483585524168262220906489642018075101617466780496790573690289968
  23. 293825989466396564333419951255644330166833468672422805842178911936214659279
  24. 769246427201094785080787978422393713094534885688979999504447628313150135520
  25. 28624020537229717283244863695841661789309459371299941322398704536965075971940465647510004531000816
  26. 955620997609204752896986850849030784038174487916669186294134525152075026461787231598163278910835948084128
  27. 99080696264900721472208515956748759187919804840608734007367661059706052043279378932885908102386332543066271936
  28. 31903676490304597847185685736169548906931858202641803975680844768196795244879691985828019808017263472521442003280
  29. 1065113236465588309403889415460645093083860991848425732542338227915288346612042420944981983005010603735148681490199640832
复制代码
代码
  1. a,b=1,1
  2. while 1:
  3.   a,b=b,a+b
  4.   if a%sum((int(i)for i in str(a)))==0 and len(str(a))!=1:print(a)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-15 21:37:12 | 显示全部楼层
看看答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-14 10:18:06 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 14:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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