首页 > 编程 > Python > 正文

python求解水仙花数的方法

2020-01-04 19:16:28
字体:
来源:转载
供稿:网友

这篇文章主要介绍了python求解水仙花数的方法,较为详细的分析了水仙花数问题的概念与对应解决方法的实现技巧,需要的朋友可以参考下

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

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

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


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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表