返回顶部
首页 > 资讯 > 后端开发 > Python >python 算法题——快乐数的多种解法
  • 935
分享到

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

python算法题python快乐数 2022-06-02 22:06:58 935人浏览 泡泡鱼

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
要求:当输入快乐的数字时,输出True,否则输出False。

思路:

当输入的不是快乐数字时,会陷入一个无限循环,因此增加一个计数器 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 算法题快乐数的资料请关注编程网其它相关文章!

--结束END--

本文标题: python 算法题——快乐数的多种解法

本文链接: https://lsjlt.com/news/10805.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python 算法题——快乐数的多种解法
    目录题目描述:思路:代码:改良版采用递归数学方法题目描述: 编写一个算法来确定一个数字是否“快乐”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛...
    99+
    2022-06-02
    python 算法题 python 快乐数
  • LeetCode算法题python解法:
    英文题目:The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to d...
    99+
    2023-01-30
    解法 算法 LeetCode
  • Python编程算法:如何快速解决难题?
    Python是一门广泛应用于计算机编程和科学计算的高级编程语言。它简单易学,语法清晰,且拥有丰富的第三方库和工具。Python的强大之处在于它的算法,这些算法可以帮助你快速解决各种难题。 在本文中,我们将介绍几个Python编程算法,这些...
    99+
    2023-06-22
    编程算法 ide load
  • 快速掌握LeetCode算法题解的方法与技巧
    LeetCode是一个著名的算法题库,由于其题目难度较高,很多人在刷题的时候会遇到各种困难。本文将分享一些快速掌握LeetCode算法题解的方法与技巧,希望能够帮助大家更好地刷题。 一、刷题技巧 1.1 利用题目标签 LeetCode的题目...
    99+
    2023-06-27
    windows numpy leetcode
  • java计算π的多种方法
    计算π的方法  一、蒙特卡罗法 这种方法是一种利用计算机随机数的功能基于“随机数”的算法,通过计算落在单位圆内的点与落在正方形内的点的比值求π。 由于图形的对称性,我们靠...
    99+
    2024-04-02
  • 用 Python 数据结构破解算法难题
    ...
    99+
    2024-04-02
  • Python算法题----最大公约数
    求最大公约数,辗转相除法。仍然是递归和递推的算法。不解释,上代码。 def divideNum01(n1, n2):     while n1 % n2 != 0:         r = n1 % n2         n1 = n2  ...
    99+
    2023-01-31
    最大公约数 算法 Python
  • A*算法求解八数码难题(python实现)
    目录 文章目录 前言 一、八数码难题是什么? 二、算法详解 1.启发函数(曼哈顿距离) 2.状态移动处理 3. A*搜索并返回路径  三、完整代码(注释很详尽) 总结 前言         本文用python实现A*...
    99+
    2023-10-27
    python 算法 人工智能
  • 如何在leetcode上使用Python编写更快的算法来解决大数据问题?
    当我们在LeetCode上解决算法问题时,我们通常会遇到一些大数据集的测试用例。这些大数据集可能会导致我们的算法运行缓慢,甚至超时。因此,编写更快的算法是非常关键的。在本文中,我们将探讨如何使用Python编写更快的算法来解决大数据问题。 ...
    99+
    2023-09-24
    leetcode 大数据 打包
  • Python 解析参数的三种方法
    Let's go!我们以机器学习当中的调参过程来进行实践,有三种方式可供选择。第一个选项是使用 argparse,它是一个流行的 Python 模块,专门用于命令行解析;另一种方法是读取 JSON 文件,我们可以在其中放置所有超参数;第三种...
    99+
    2023-05-14
    代码 Python 参数
  • Python中的np.random.seed()随机数种子问题及解决方法
    目录1. 何为随机数种子2. np.random.seed()参数问题3. 使用方法4. 随机数种子问题总结 前言: 最近在学习过程中总是遇到np.random.seed()这个问题...
    99+
    2024-04-02
  • PHP数组交集的快速计算算法
    php 中快速计算数组交集的算法是使用 array_intersect() 函数,该函数返回所有交集元素。该算法步骤如下:创建需要比较的数组。使用 array_intersect() 函...
    99+
    2024-05-01
    算法 php
  • rsa详解及例题及python算法
    目录rsa 详解及例题及python算法原理算法描述案例手稿实现python 运算m=71 -> c=15c=15 -> m=71正常的rsa c->mm->...
    99+
    2024-04-02
  • 多种方法解决Windows7桌面图标无法拖动的问题
    在使用电脑的时候是不是遇到过Windows 7桌面图标无法拖动的情况啊?这虽然是一个小问题,不影响电脑的正常使用,如何解决这具问题呢,网上也有好多种解决方法,但由于方法不具有   • 右键 - 查看,取消&ld...
    99+
    2023-06-02
    无法拖动 Win7 桌面图标 问题 方法
  • mysql计算环比的方法(多种情况)
    整理不易,转发请注明出处,请勿直接剽窃! 点赞、关注、不迷路! 摘要: 历史、当前月环比 公式:环比=(本月-上月)/上月 历史月环比(适用于计算历史每个月的环比) select (a...
    99+
    2023-09-30
    mysql 数据库 sql
  • Python解析参数的三种方法详解
    本篇文章给大家带来了关于Python的相关知识,其中主要整理了解析参数的三种方法相关问题,第一个选项是使用 argparse,它是一个流行的 Python 模块,专门用于命令行解析;另一种方法是读取 JSON 文件,我们可以在其中放置所有超...
    99+
    2022-08-08
    python
  • 如何使用Python numpy实现LeetCode算法题的快速响应?
    LeetCode是一个非常流行的算法题平台,它的题目涵盖了许多数据结构和算法的知识点,非常适合算法学习者练习和提高自己的编程能力。在解决LeetCode算法题的过程中,我们经常会用到Python的numpy库,这个库提供了很多高效的数学函...
    99+
    2023-06-05
    numpy 响应 leetcode
  • python 序列解包的多种形式及用法解析
    序列解包(Sequence Unpacking) 是Python中非常重要和常用的一个功能,可以使用非常简洁的形式完成复杂的功能,大幅度提高了代码的可读性,减少了程序员的代码输入量。 例如,可以使用序列解包功能对多个...
    99+
    2022-06-02
    python 序列解包
  • 前端JavaScript多数元素的算法详解
    目录题目:多数元素方法一:map 实现方法二:排序题目:多数元素 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ...
    99+
    2024-04-02
  • 全网多种方法解决com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure的问题
    文章目录 1. 复现错误2. 分析错误3. 解决问题4. 解决该错误的其他方法 1. 复现错误 今天在使用knife4j,调用后端接口时,报出如下错误: 于是,赶紧查看控制台的错误信息,错误信息如下所示: com.mysql...
    99+
    2023-08-16
    mysql java 数据库 后端 spring boot
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作