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)

相关推荐

  • Python中用max()方法求最大值的介绍

    max() 方法返回其参数最大值:最接近正无穷大的值. 语法 以下是max()方法的语法: max( x, y, z, .... ) 参数 x -- 这是一个数值表达式. y -- 这也是一个数值表达式. z -- 这是一个数值表达式. 返回值 此方法返回其参数的最大值. 例子 下面的例子显示了max()方法的使用. #!/usr/bin/python print "max(80, 100, 1000) : ", max(80, 100, 1000) print "max(-

  • python求斐波那契数列示例分享

    复制代码 代码如下: def getFibonacci(num): res=[0,1] a=0 b=1 for x in range(0,num):  if x==a+b:   res.append(x)   a,b=b,a+b return res res=getFibonacci(1000)print(res) #递归a=[0,1]qian=0def fibna(num,qian): print(num) he=num+qian if he<1000:  a.append(he)  qian

  • Python求两个list的差集、交集与并集的方法

    本文实例讲述了Python求两个list的差集.交集与并集的方法.分享给大家供大家参考.具体如下: list就是指两个数组之间的差集,交集,并集了,这个小学数学时就学过的东西,下面就以实例形式对此加以分析. 一.两个list差集 如有下面两个数组: a = [1,2,3] b = [2,3] 想要的结果是[1] 下面记录一下三种实现方式: 1. 正常的方式 复制代码 代码如下: ret = [] for i in a:     if i not in b:         ret.append(

  • 利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定.假定没有外力时,两个弹簧的长度为L1和L2. 由于两物体有重力,那么在平面上形成摩擦力,那么摩擦系数分别为b1和b2.所以可以把微分方程写成这样: 这是一个二阶的微分方程,为了使用python来求解,需要把它转换为一阶微分方程

  • python求众数问题实例

    本文实例讲述了python求众数问题的方法,是一个比较典型的应用.分享给大家供大家参考.具体如下: 问题描述: 多重集中重数最大的元素称为众数...就是一个可以有重复元素的集合,在这个集合中重复的次数最多的那个数就叫它的众数... 如S = [1,2,2,2,3,5] 重数是2,其重数为3 实例代码如下: list_num = [] list_num_count = 0 dict_num ={} #从文件读入,文件第一行为集合中元素的个数,以后每一行为一个元素 list_num_count =

  • python求列表交集的方法汇总

    本文实例汇总了python求列表交集的方法.分享给大家供大家参考.具体方法如下: 交集对于给定的两个集合A 和 集合B 的交集是指含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合叫交集了,下面给出几个python求列表交集例子供大家参考. 方法1 遍历b1,如果某个元素同时也存在于b2中,则返回 复制代码 代码如下: b1=[1,2,3] b2=[2,3,4] b3 = [val for val in b1 if val in b2] print b3 运行结果如下 复制代码 代码如

  • python里对list中的整数求平均并排序

    问题 定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数, (1)将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来. (2)将这40个成绩按照从高到低的顺序输出出来. 解决(python) #! /usr/bin python #coding:utf-8 from __future__ import division #实现精确的除法,例如4/3=1.333333 import random def make_scor

  • Python求导数的方法

    本文实例讲述了Python求导数的方法.分享给大家供大家参考.具体实现方法如下: def func(coeff): sum='' for key in coeff: sum=sum+'+'+str(key)+'*'+'x'+'**'+str(coeff[key]) return sum[1:] from sympy import * from sympy.core.sympify import SympifyError expr = func({2:0,3:1,4:2,5:7}) x = Sym

  • python求素数示例分享

    复制代码 代码如下: # 判断是否是素数def is_sushu(num): res=True for x in range(2,num-1):  if num%x==0:   res=False   return res return res # 打印出素数列表print ([x for x in range(1000) if is_sushu(x)])

  • python求crc32值的方法

    本文实例讲述了python求crc32值的方法.分享给大家供大家参考.具体实现方法如下: 要想求CRC值,前面要import binascii binascii.crc32(v)  求出了v的crc32值,这是一个long型,形如-1456387L,把这个值&0xffffffff得到的值形如48a213L的形式. 然后把这个值用16进制表示出来. 具体代码如下: def _crc32(self, v): """ Generates the crc32 hash of

随机推荐