第48期-快乐的数字

1 问题描述

从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,
直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。
能够最终收敛等于1的数就是快乐的数字。

2 解题思路

  • 第一步: 重复循环,需要使用while True无限循环,到结果为1时结束循环
  • 第二步: 若结果重复出现两次不是一的数,那边会进入死循环,此时就不是快乐的数字

3 解题方法

x = input('请输入这个数:')
a,m=[x],0
while True:
    y = 0
    for i in range(len(str(a[m]))):
        y += (int(a[m]) // (10 ** i) % 10)**2
    if y == 1:
        print(True)
        break
    if y in a:
        print(False)
        break
    a.append(y)
    m+=1
View Code

第1行: 使用input函数输入一个数并赋值给x
第2行: 定义列表a和变量m,并为之分别赋值
第3行: 无限循环直到遇到break结束循环
第4行: 定义变量y并赋值为0,用于计算各位数平方和
第5-6行: for循环根据数字的长度,判断计算次数,每次都给变量y加上各位数的平方
第7-9行: 判断y是否等于1,若等于1,则输出true并结束循环
第10-12行: 若y不等于1,判断y是否之前出现过,若出现过,则表示会出现循环,不可能会再次等于1,输出false并结束循环
第13行: 上述条件均不满足,则在列表a中添加元素y,判断之后是否会再次出现
第14行: m作为索引,用于抓取列表最后一个元素

代码运行结果为:
image.jpg

#小思考

代码中的m可不可以去掉用别的更简单的方法呢?

posted @ 2022-01-06 17:59  LG03  阅读(89)  评论(0编辑  收藏  举报