,,python 算法题——快乐数的多种解法

,,python 算法题——快乐数的多种解法

看书、看视频可以帮助你学习代码,但只是辅助。学好Python,最重要的是多打代码,多刷题。本文讲述了快乐数算法问题的多种解决方案,帮助你打开思路。

目录

标题描述:思路:代码:改进版采用递归数学方法。

标题描述:

写一个算法,判断一个数字是否“快乐”。快乐数是这样确定的:从一个正整数开始,用它的位数的平方和代替这个数,重复这个过程,直到最后的数要么收敛到1,永远等于1,要么无穷循环,最后不收敛到1。最终收敛到1的数是快乐数。

比如:19是一个喜庆的数字,计算过程如下:

1^2 9^2=82

8^2 2^2=68

6^2 8^2=100

1^2 0^2 0^2=1

要求:输入快乐数字时,输出真,否则输出假。

想法:

1.当你没有输入一个快乐的数时,你会陷入一个死循环,所以加一个计数器count来统计计算的次数。当计数设置为2000次时,认为该数不是快乐数,跳出循环结束计算。

2.因为不确定输入的数字会有多少位,所以不使用除法和取模的方法来获取数字的每一位,而是使用for循环来获取字符串类型数字的每一位来计算平方和。

代码:

#快乐的数字

def getSumofSquares(数量):

NumStr=str(num) #将要计算的数字转换为字符串类型。

总和=0

digit ls=[int(x for x in numStr]#从字符串中提取每个数字,并将其存储在一个列表中。

#注意:这一步有点多余,因为python中的字符串可以像列表一样分片或者循环。请参见下面的更新部分。

#打印(数字)

对于数字中的I:

总和=i**2

返回总和

def main():

N=input() #输入一个正整数

sumofSqrs=eval(n)

计数=0

而sumofSqrs!=1:

sumofSqrs=getSumofSquares(sumofSqrs)

计数=1

计数2000: #当计算次数超过2000时,跳出循环,结束计算。

打印(“假”)

破裂

否则:

打印(“真”)

主()

改进版

根据网友在评论区提出的不开心的数字,最终会在数字[4,16,37,58,89,145,42,20]中无限循环,你可以加入判断。当数字变成这些数字中的任意一个(比如4),你就结束循环,输出False,这样就避免了无限循环。

修改后的代码:

#(新)快乐数字

def getSumofSquares(数量):

numStr=str(数字)

总和=0

对于numStr中的I:

sum=int(i)**2

返回总和

def main():

N=input() #n是正整数

sumofSqrs=eval(n)

而sumofSqrs!=1和sumofSqrs!=4: # or while sumofsqrs不在[1,4,16,37,58,89,145,42,20]中

sumofSqrs=getSumofSquares(sumofSqrs)

否则:

如果sumofSqrs==1:

打印(“真”)

否则:

打印(“假”)

主()

采用递归

def happy(n):

尝试:

如果n==1:

打印(“真”)

否则:

new=str(n)

总和=0

对于新版本中的c:

sum=int(c)**2

快乐归来(总和)

例外情况为e:

打印(“假”)

#打印(e)

n=eval(输入())

快乐

数学方法

d={}

虽然正确:

m=0

而n 0:

m=(n)**2

n //=10

如果m在d中:

返回False

如果m==1:

返回True

d[m]=m

n=m

最佳化的

类别解决方案(对象):

def isHappy(self,n):

'''

:类型n: int

:rtype: bool

'''

记录=[]

sq_sum=0

硒氮=氮

而se_n!=1:

sq_sum=0

而se_n 0:

sq_sum=(硒氮% 10) *(硒氮% 10)

硒氮=硒氮/10

如果sq_sum在记录中:

返回False

记录.追加(sq_sum)

se _ n=sq _总和

返回True

以上是python算法问题——快乐数的各种解决方案的细节。更多关于python算法问题开心号的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: