快乐的数字,用python
本帖最后由 仔鹿 于 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):
res.append((n, happy(n)))
sum += happy(n)
print(res)
print(f"平均计算次数:{round(sum/len(res), 1)}") 傻眼貓咪 发表于 2021-11-8 21:16
谢谢帮助~
页:
[1]