wyp02033 发表于 2018-9-11 17:12:07

def fab():
    a, b = 5, 8
    while True:
      a, b = b, a + b
      yield b

def main():
    num = fab()
    count = 0
    while count < 10:
      next_num = next(num)
      next_num_sum = sum()

      if next_num % next_num_sum == 0:
            print(next_num)
            count += 1

if __name__ == '__main__':
    main()

龙战yl天下 发表于 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=x-sz*(10**(s-h-1))
      sum+=sz
      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

土匪加步枪 发表于 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

BlueSand 发表于 2018-9-11 21:20:06

# encoding: utf-8


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

def isGood(n1, n2):
        if n1 % n2 == 0:
                return True
        else:
                return False
i = 0
f1 = 1
f2 = 1
result= []
while i < 10:
        f3 = f1 + f2
        f1, f2 = f2, f3
        if f3 > 10:
                t = getSum(f3)
                if isGood(f3, t):
                        result.append(f3)
                        i = i + 1
print(result)
答案:
[21,
144,
2584,
14930352,
86267571272,
498454011879264,
160500643816367088,
114059301025943970552219,
5358359254990966640871840,
555565404224292694404015791808]
为什么你们的代码都这么简洁的,好羡慕

archlzy 发表于 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

子沙 发表于 2018-9-11 21:47:44

本帖最后由 子沙 于 2018-9-11 21:54 编辑

def fun_206(num):
    x1,x2=1,1
    x1,x2=x2,x1+x2
    num1=0
    while num1<num:
      x1,x2=x2,x1+x2
      if len(str(x2))>=2:
            if x2%sum(list(map(lambda x:int(x),list(str(x2)))))==0:
                print(x2)
                num1+=1
fun_206(10)

运行结果如下:

21
144
2584
14930352
86267571272
498454011879264
160500643816367088
114059301025943970552219
5358359254990966640871840
555565404224292694404015791808

CoderWGB 发表于 2018-9-11 22:26:40

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


# 666 -> 6+6+6 = 18获取各位之和
def aliquot(num):
      temp = 0
      for i in range(len(str(num))):
               temp += int(str(num))
      return temp

# 1,1,2,3,5,8,13,21...
def fibsNum():
      a = 0
      b = 1
      num_list = []
      while True:
                a,b = b,a+b
                if a > 10:
                     div = aliquot(a)
                     if a%div == 0:
                              num_list.append(a)
                              if len(num_list) == 10:
                                        return num_list




print(fibsNum())

真是没想到,这后面的几个数这么大!!!

学学看看 发表于 2018-9-12 11:30:53

小沈同学 发表于 2018-9-13 20:51:54

z

jj482846 发表于 2018-9-13 22:34:04

n:每日一题 206 [修改]

Frankly 发表于 2018-9-14 07:45:42

看看

Y2M5210 发表于 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()

Chysial 发表于 2018-9-14 14:30:52

# 斐波那切数列 c=a+b
def fibonacci():
    a = 1
    b = 0
    ailquot = 0
    n = 0
    fibo_sequence = []
    fibo_divisible_number = []
    while n<10:
      c = a+b
      b = a
      a = c
      fibo_sequence.append(c)
      if len(str(c)) > 1:
            t = sum()
            if c%t == 0:
                fibo_divisible_number.append(c)
                n += 1
    return fibo_sequence,fibo_divisible_number
print(fibonacci())
结果:
fibo_divisible_number:

tkxlyytqy 发表于 2018-10-12 11:11:41

# -*- 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)

抬起头~ 发表于 2018-10-15 21:42:10

加油

喜欢吃菠菜 发表于 2018-10-17 09:44:03

塔利班 发表于 2018-9-10 10:43


这么多答案中,我看到的最pythonnic的,特别是map这个函数的写法。&#128077;

sunrise085 发表于 2019-1-21 16:35:24

为了节省程序运行时间,斐波那契数就别再调用函数了,那样会多出很多次重复运算,直接在主程序中这样写,相当于只调用了一次斐波那契,而不是每进行一次while循环,就调用一次。
def mysum(num):
        result=0
        while num:
                result+=num%10
                num=num//10
        return result

i,x1,x2=1,8,13
while i<=10:
        if x2%mysum(x2)==0:
                print('第%2d个数是%d' %(i,x2))
                i+=1
        x1,x2=x2,x1+x2
结果:
第 1个数是21
第 2个数是144
第 3个数是2584
第 4个数是14930352
第 5个数是86267571272
第 6个数是498454011879264
第 7个数是160500643816367088
第 8个数是114059301025943970552219
第 9个数是5358359254990966640871840
第10个数是555565404224292694404015791808

永恒的蓝色梦想 发表于 2019-8-17 22:04:57

本帖最后由 永恒的蓝色梦想 于 2019-8-17 22:05 编辑

不加限制算出来好多……
(部分结果)21
144
2584
14930352
86267571272
498454011879264
160500643816367088
114059301025943970552219
5358359254990966640871840
555565404224292694404015791808
1226132595394188293000174702095995
18547707689471986212190138521399707760
107168651819712326877926895128666735145224
280571172992510140037611932413038677189525
619220451666590135228675387863297874269396512
64202014863723094126901777428873111802307548623680
271964099255182923543922814194423915162591622175362
6656593304481317393598839952151746590023553382130993248
263621064469290555679241849789653324393054271110084140201023
690168906931029935139391829792095612517948949963798093315456
137347080577163115432025771710279131845700275212767467264610201
23041483585524168262220906489642018075101617466780496790573690289968
293825989466396564333419951255644330166833468672422805842178911936214659279
769246427201094785080787978422393713094534885688979999504447628313150135520
28624020537229717283244863695841661789309459371299941322398704536965075971940465647510004531000816
955620997609204752896986850849030784038174487916669186294134525152075026461787231598163278910835948084128
99080696264900721472208515956748759187919804840608734007367661059706052043279378932885908102386332543066271936
31903676490304597847185685736169548906931858202641803975680844768196795244879691985828019808017263472521442003280
1065113236465588309403889415460645093083860991848425732542338227915288346612042420944981983005010603735148681490199640832代码a,b=1,1
while 1:
a,b=b,a+b
if a%sum((int(i)for i in str(a)))==0 and len(str(a))!=1:print(a)

小陨aoq 发表于 2020-8-15 21:37:12

看看答案

19971023 发表于 2020-12-14 10:18:06

1
页: 1 2 [3]
查看完整版本: Python:每日一题 206