[Python] python求解水仙花数 →→→→→进入此内容的聊天室

来自 , 2020-05-27, 写在 Python, 查看 166 次.
URL http://www.code666.cn/view/8ae5780d
  1. #!/usr/bin/python
  2.  
  3. def get_flower(n, ofile):
  4.   D_pow=[pow(i,n) for i in range(0,10)]
  5.   V_min=1*pow(10,n-1)
  6.   V_max=sum((9*pow(10,x) for x in range(0,n)))
  7.   T_count=0
  8.   print D_pow, V_max, V_min
  9.   nums=[1]+[0]*(n-1)
  10.   print 'Start:', nums
  11.  
  12.   idx=n-1
  13.   tmp_l=[0]*10
  14.   while True:
  15.     nums[idx]+=1
  16.     if nums[idx]<10:
  17.       j=idx+1
  18.       while j<n:
  19.         nums[j]=nums[idx] # reset
  20.         j+=1
  21.       v=sum((D_pow[x] for x in nums))
  22.       if v<=V_max and v>=V_min:
  23.         T_count+=1
  24.         #test if is flower
  25.         #print 'do test:', ''.join(map(str,nums))
  26.         k=0
  27.         while k<10:
  28.           tmp_l[k]=0
  29.           k+=1
  30.         N=0
  31.         for k in nums:
  32.           tmp_l[k]+=1
  33.           N+=1
  34.         while N>0:
  35.           p=v%10
  36.           if tmp_l[p]>0:
  37.             tmp_l[p]-=1
  38.             N-=1
  39.           else:
  40.             break
  41.           v/=10
  42.         if N==0:
  43.           print >>ofile, 'hit', sum((D_pow[x] for x in nums))
  44.       idx=n-1
  45.     elif idx==0:
  46.       print 'done'
  47.       break
  48.     else:
  49.       idx-=1
  50.   print 't_count', T_count
  51.  
  52. if __name__ == '__main__':
  53.   with file('./f.txt', 'wb') as o:
  54.     get_flower(21, o)
  55.     #get_flower(3, o)
  56. #//python/7281

回复 "python求解水仙花数"

这儿你可以回复上面这条便签

captcha