|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 仔鹿 于 2021-11-8 21:03 编辑
实现下面程序功能:求解指定区间中的快乐数字收敛到1需要的平均计算次数。
快乐的数字按照如下方式确定: 从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。
每次用每位数的平方之和取代该数的过程为一个计算次数,当计算次数超过2000次时,认为概述不是快乐数字,概述不计入统计。
例如: 19 就是一个快乐的数字,计算过程如下:
1**2 + 9**2 = 82
8**2 + 2**2 = 68
6**2 + 8**2 = 100
1**2 + 0**2 + 0**2 = 1
输入描述
600,700
输出描述
输入区间a,b:600,700
[(608, 2), (617, 3), (622, 5), (623, 5), (632, 5), (635, 6), (637, 5), (638, 5), (644, 3), (649, 6), (653, 6), (655, 3), (656, 4), (665, 4), (671, 3), (673, 5), (680, 2), (683, 5), (694, 6), (700, 5)]
平均计算次数:4.4
本帖最后由 傻眼貓咪 于 2021-11-8 21:18 编辑
- def f(n):
- res = 0
- for s in str(n):
- s = int(s)
- res += s**2
- return res
- def happy(n):
- count = 0
- while n > 1 and count < 2000:
- count += 1
- n = f(n)
- return (n == 1, count)
- res = []
- sum = 0
- for n in range(600, 700):
- if happy(n)[0]:
- res.append((n, happy(n)[1]))
- sum += happy(n)[1]
- print(res)
- print(f"平均计算次数:{round(sum/len(res), 1)}")
复制代码
|
|