python算法题的示例分析

这篇文章将为大家详细讲解有关python算法题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

题目描述:

编写一个算法来确定一个数字是否“快乐”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。

python算法题的示例分析

例如:19是一个快乐数字,计算过程如下:

1^2+9^2=828^2+2^2=686^2+8^2=1001^2+0^2+0^2=1要求:当输入快乐的数字时,输出True,否则输出False。

思路:

1. 当输入的不是快乐数字时,会陷入一个无限循环,因此增加一个计数器 count 用来统计计算次数。设定当 count 达到2000次时,认为该数字不是快乐数字,跳出循环结束计算。2. 因为不确定输入的数字会是几位数,因此不采用除法和取模的方法来获得数字的每一位数,而是利用 for 循环获取字符串类型数字的每一位来计算平方和。

代码:

#快乐的数字
defgetSumofSquares(num):
numStr=str(num)#将待计算的数字转换成字符串类型
sum=0
digitls=[int(x)forxinnumStr]#从字符串中提取出每一位数字存入一个列表
#注:该步略显多余,因为python中字符串可以和列表一样切片取值或循环,见下方更新部分
#print(digitls)
foriindigitls:
sum+=i**2
returnsum

defmain():
n=input()#输入一个正整数
sumofSqrs=eval(n)
count=0
whilesumofSqrs!=1:
sumofSqrs=getSumofSquares(sumofSqrs)
count+=1
ifcount>2000:#当计算次数超过2000次时,跳出循环结束计算
print("False")
break
else:
print("True")

main()

改良版

根据网友在评论区提出的不快乐的数字最终会在 [4,16,37,58,89,145,42,20] 这些数字中无限循环,因此可以加入判断,当数字变为这些数字里的任意一个(比如4)时就结束循环,输出False,从而避免无限循环的产生。

修改后的代码:

#(新)快乐的数字
defgetSumofSquares(num):
numStr=str(num)
sum=0
foriinnumStr:
sum+=int(i)**2
returnsum

defmain():
n=input()#n为一个正整数
sumofSqrs=eval(n)
whilesumofSqrs!=1andsumofSqrs!=4:#或whilesumofSqrsnotin[1,4,16,37,58,89,145,42,20]
sumofSqrs=getSumofSquares(sumofSqrs)
else:
ifsumofSqrs==1:
print("True")
else:
print("False")

main()

采用递归

defhappy(n):
try:
ifn==1:
print('True')
else:
new=str(n)
sum=0
forcinnew:
sum+=int(c)**2
returnhappy(sum)
exceptExceptionase:
print('False')
#print(e)

n=eval(input())
happy(n)

数学方法

d={}
whileTrue:
m=0
whilen>0:
m+=(n%10)**2
n//=10
ifmind:
returnFalse
ifm==1:
returnTrue
d[m]=m
n=m

优化过的

classSolution(object):
defisHappy(self,n):
"""
:typen:int
:rtype:bool
"""
record=[]
sq_sum=0
se_n=n

whilese_n!=1:
sq_sum=0
whilese_n>0:
sq_sum+=(se_n%10)*(se_n%10)
se_n=se_n/10
ifsq_suminrecord:
returnFalse
record.append(sq_sum)
se_n=sq_sum

returnTrue

关于“python算法题的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

发布于 2021-05-30 14:04:57
收藏
分享
海报
0 条评论
165
上一篇:vue-cropper插件如何实现图片截取上传组件封装 下一篇:怎么用Python监控你的朋友都在浏览哪些网站
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码