#4205. 角谷猜想(23-3二级)

角谷猜想(23-3二级)

🔢 角谷猜想区间最大步数统计


📘【问题描述】

    • 角谷猜想(又称 Collatz 猜想) **的规则如下:
  • 对于任意一个正整数:
  • 若是 ​ 偶数​,则变成它的一半;
  • 若是 ​ 奇数​,则变成它的 ​ 3倍加 1​;
  • 不断重复上述操作,最终所有数都将变为 1;
  • 到达 1 后会进入循环:1 → 4 → 2 → 1 → …

请你编程计算:在输入的两个正整数所构成的区间范围内(包括端点), 变化步骤最多的数字和​ 对应的步骤数​。

  • 如果输入的第一个数大于第二个数,程序应自动交换两个数;
  • 步骤计算应包括起始数字本身。例如:
  • 10 的变化过程为:10 → 5 → 16 → 8 → 4 → 2 → 1,共 ​ 7 步​。

📥【输入格式】

共两行,分别输入两个正整数 aabb,表示区间范围的起止数字。(1a,b105)(1 \leq a, b \leq 10 ^ 5)


📤【输出格式】

共两行:

  • 第 1 行:在 [a,b][a, b] 区间内​ 变化步骤最多的数字​;
  • 第 2 行:该数字的​ * *变化步骤数 * *​。

🎯【样例输入 1】

10
20

🎯【样例输出 1】

18
21

🎯【样例输入 2】

100
200

🎯【样例输出 2】

171
125

🎯【样例输入 3】

500
300

🎯【样例输出 3】

327
144

🧠 解题思路提示

  1. 使用 for 循环遍历区间内的每个数字;
  2. 对每个数字使用 while 模拟角谷变换过程;
  3. 使用变量记录最大步数和对应数字;
  4. 注意处理 a > b 的情况,需交换后再处理。


⏱️ 复杂度分析

  • 时间复杂度:约 O(nlogn)O(n \log n),每个数最多变化 logn\log n 步;
  • 空间复杂度:O(1)O(1),未使用额外数组。