网络编程
位置:首页>> 网络编程>> Python编程>> python求解水仙花数的方法

python求解水仙花数的方法

作者:上大王  发布时间:2023-10-08 12:07:28 

标签: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程序设计有所帮助。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com