欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python求解水仙花数的方法

程序员文章站 2022-06-14 16:15:38
本文实例讲述了python求解水仙花数的方法。分享给大家供大家参考。具体如下: 一个n位的十进制正整数,如果它的每个位上的数字的n次方的和等于这个数本身,则称其为花朵数。...

本文实例讲述了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程序设计有所帮助。