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


Posted in Python onMay 27, 2021

题目描述:

编写一个算法来确定一个数字是否“快乐”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于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
要求:当输入快乐的数字时,输出True,否则输出False。

思路:

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

代码:

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

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

main()

改良版

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

修改后的代码:

#(新)快乐的数字
def getSumofSquares(num):
    numStr=str(num)
    sum=0
    for i in numStr:
        sum += int(i)**2
    return sum

def main():
    n = input() #n为一个正整数
    sumofSqrs = eval(n)
    while sumofSqrs != 1 and sumofSqrs != 4: #或 while sumofSqrs not in [1,4,16,37,58,89,145,42,20]
        sumofSqrs = getSumofSquares(sumofSqrs)
    else:
        if sumofSqrs == 1:
            print("True")
        else:
            print("False")

main()

采用递归

def happy(n):
        try:
                if n==1:
                        print('True')
                else:
                        new = str(n)
                        sum = 0
                        for c in new:
                                sum += int(c)**2
                        return happy(sum)
        except Exception as e:
                print('False')
                # print(e)

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

数学方法

d = {}
        while True:
            m = 0
            while n > 0:
                m += (n%10)**2
                n //= 10 
            if m in d:
                return False
            if m == 1:
                return True
            d[m] = m
            n = m

优化过的

class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        record = []
        sq_sum = 0
        se_n = n

        while se_n != 1:
            sq_sum = 0
            while se_n > 0:
                sq_sum += (se_n % 10) * (se_n % 10)
                se_n = se_n / 10
            if sq_sum in record:
                return False
            record.append(sq_sum)
            se_n = sq_sum

        return True

以上就是python 算法题——快乐数的多种解法的详细内容,更多关于python 算法题快乐数的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python 网络编程起步(Socket发送消息)
Sep 06 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
Python 模拟购物车的实例讲解
Sep 11 Python
对python中的for循环和range内置函数详解
Apr 17 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 Python
python如何通过pyqt5实现进度条
Jan 20 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
详解anaconda安装步骤
Nov 23 Python
用Python监控你的朋友都在浏览哪些网站?
Python图片处理之图片裁剪教程
用Python进行栅格数据的分区统计和批量提取
手把手教你怎么用Python实现zip文件密码的破解
Python基础学习之奇异的GUI对话框
教你使用pyinstaller打包Python教程
Matplotlib绘制混淆矩阵的实现
You might like
PHP 中关于ord($str)>0x80的详细说明
2012/09/23 PHP
PHP Session机制简介及用法
2014/08/19 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
JQuery查找DOM节点的方法
2015/06/11 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
详解vue组件基础
2018/05/04 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
python解析模块(ConfigParser)使用方法
2013/12/10 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
新春寄语大全
2014/04/09 职场文书
大学课外活动总结
2014/07/09 职场文书
高中运动会广播稿
2014/09/16 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
司机个人年终总结
2015/03/03 职场文书