B. 快乐数

    传统题 1000ms 256MiB

快乐数

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

快乐数

题目背景

快乐数是一个经典的数学问题,其定义基于数字各位平方和的迭代运算。通过判断迭代过程是否最终收敛到 1,我们可以确定一个正整数是否为快乐数。

题目描述

对于一个正整数,我们定义如下迭代操作:

  1. 将该数的每一位数字分别平方后求和,得到一个新的正整数。
  2. 对新得到的正整数重复执行上述操作。

如果经过若干次迭代后,结果变为 1,则称原数为快乐数;如果迭代过程进入无限循环且始终无法得到 1,则原数不是快乐数。

现在给定一个正整数 nn,请你编写程序判断它是否为快乐数。

输入格式

一行一个正整数 nn。

输出格式

如果 nn 是快乐数,输出一行 true;否则输出一行 false。

样例 #1

样例输入 #1

19

样例输出 #1

true

样例 #2

样例输入 #2

2

样例输出 #2

false

提示

样例解释 #1

对于输入 n=19n=19,迭代过程如下:

  • 12+92=1+81=821^2 + 9^2 = 1 + 81 = 82
  • 82+22=64+4=688^2 + 2^2 = 64 + 4 = 68
  • 62+82=36+64=1006^2 + 8^2 = 36 + 64 = 100
  • 12+02+02=1+0+0=11^2 + 0^2 + 0^2 = 1 + 0 + 0 = 1

经过 4 次迭代后结果变为 1,因此 19 是快乐数。

数据范围与约定

  • 对于 100%100\% 的数据,保证 1≤n≤231−11 \le n \le 2^{31} - 1。

算法提示

  • 方法一:使用哈希集合记录已经出现过的数字,若某个数字重复出现则说明进入了循环。
  • 方法二:使用快慢指针法(Floyd 判圈算法)来检测循环,该方法不需要额外的空间。

【算法解析与逻辑建模进阶】第 4 次随堂测验

未参加
状态
已完成
规则
乐多
题目
3
开始于
2026-5-17 18:00
结束时间
2026-5-17 18:20
持续时间
0.3 小时
主持人
参赛人数
27