前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|平方怪圈

Python|平方怪圈

作者头像
算法与编程之美
发布2020-03-12 16:27:07
7230
发布2020-03-12 16:27:07
举报

问题描述

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理,如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。请输出这个循环圈中最大的那个数字。

解决方案

先创立一个空列表,把每个新产生的正整数加进去,如果在一个新产生的正整数加进去时,列表里面已经有了这个正整数,那就表明已经找到了这个循环圈。接着输出列表最大数就完成题目要求。

但是,如何知道新产生的正整数已经存在列表中。因为这道题是要找循环圈,不知道要按平方和处理多少次的,所以基本都是采用while循环,但如果在while循环后面的条件是新产生的正整数不在列表内,后面总有一步是列表添加新的正整数,所以while循环只能循环1次,第2次就结束。

因此,采用了set函数,以len(set(list)) == len(list)作为while循环的条件,此时当列表中有两个相同的正整数时,循环结束,意味着找到了循环圈。

代码示例:

a = int(input()) #输入一个正整数,注意不要输入1,10,100,23等数lis = [] #创立一个空列表while len(set(lis)) == len(lis): a, b = 0, a #a恢复为0,便于储存平方和;并且a赋值给b,使其进行下一次循环 for i in list(str(b)): a += int(i)**2 lis.append(a)print(max(lis))

结语

这道题没什么难点,唯一重要的就是如何结束循环,找到怪圈。这道题其实还可以添加一个新产生的数,例如为1,就结束循环或者对原数进行某种更改(比如加1减2)的代码。因为有些数是不能找到这个怪圈的,就比如1,10,100这种数。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档