注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

python求解水仙花数

python 水墨上仙 1193次浏览 已收录 手机上查看

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)
[开心洋葱]
分享 (0)
关于作者:
水墨上仙
……
加载中……