仔鹿 发表于 2021-11-8 21:03:53

快乐的数字,用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:16:15

本帖最后由 傻眼貓咪 于 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:33:05

傻眼貓咪 发表于 2021-11-8 21:16


谢谢帮助~
页: [1]
查看完整版本: 快乐的数字,用python