您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python求解水仙花数的方法

5b51 2022/1/14 8:19:40 python 字数 1907 阅读 430 来源 www.jb51.cc/python

本文实例讲述了python求解水仙花数的方法。分享给大家供大家参考。具体如下:

概述

本文实例讲述了python求解水仙花数的方法分享给大家供大家参考。具体如下:

一个n位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。

#!/usr/bin/python
def get_flower(n,ofile):
 D_pow=[pow(i,n) for i in range(0,10)]
 V_min=1*pow(10,n-1)
 V_max=sum((9*pow(10,x) for x in range(0,n)))
 T_count=0
 print D_pow,V_max,V_min
 nums=[1]+[0]*(n-1)
 print 'Start:',nums
 idx=n-1
 tmp_l=[0]*10
 while True:
  nums[idx]+=1
  if nums[idx]<10:
   j=idx+1
   while j<n:
    nums[j]=nums[idx] # reset 
    j+=1
   v=sum((D_pow[x] for x in nums))
   if v<=V_max and v>=V_min:
    T_count+=1
    #test if is flower
    #print 'do test:',''.join(map(str,nums))
    k=0
    while k<10:
     tmp_l[k]=0
     k+=1
    N=0
    for k in nums:
     tmp_l[k]+=1
     N+=1
    while N>0:
     p=v%10
     if tmp_l[p]>0:
      tmp_l[p]-=1
      N-=1
     else:
      break
     v/=10
    if N==0:
     print >>ofile,'hit',sum((D_pow[x] for x in nums))
   idx=n-1
  elif idx==0:
   print 'done'
   break
  else:
   idx-=1
 print 't_count',T_count
if __name__ == '__main__':
 with file('./f.txt','wb') as o:
  get_flower(21,o)
  #get_flower(3,o)

希望本文所述对大家的Python程序设计有所帮助。

总结

以上是编程之家为你收集整理的python求解水仙花数的方法全部内容,希望文章能够帮你解决python求解水仙花数的方法所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶