博客
关于我
B-1001 害死人不偿命的(3n+1)猜想 (15 分)
阅读量:709 次
发布时间:2019-03-21

本文共 1058 字,大约阅读时间需要 3 分钟。

卡拉兹猜想是一个充满趣味性且具有科学背景的命题,值得我们花些时间来了解。在这一猜想中,无论你开始的数字n有多大,都会通过不断地运算最终收敛到1。这个过程的规则非常简单:如果n是偶数,就将它除以2;如果n是奇数,那么执行(3n + 1)再除以2。如此循环下去,直到得到1为止。

不过,今天的题目并不是要证明这个猜想,而是要针对给定的任意不超过1000的正整数n,计算从它开始,直到达到1所需的具体步骤数。简单而言之,就是数清楚你需要砍几下才能得到1。

输入与输出样例:

  • 输入3
  • 输出5

代码解释与优化

我们可以通过编写一个简单的循环来实现这一目标。具体步骤如下:

  • 初始化步骤计数器count为0
  • 输入一个正整数n
  • 进入一个循环,直到n等于1
  • 在每个循环迭代:
    • 如果n是奇数,则计算下一步的数值(3n + 1)再除以2,同时计数器增加1
    • 如果n是偶数,则直接将n除以2,同时计数器增加1
  • 当循环停止(n等于1时)退出,输出计数器的值
  • 注意的事项:

    • 输入的n必须是大于等于1的正整数,这是保证逻辑正确的前提条件
    • 在这个问题中,我们假设n≥1,所以当n=1时,直接输出0
    • 保证算法不会进入无限循环,因为卡拉兹猜想已经被广泛验证为正确,那么对于任意正整数n,最终都会收敛到1

    代码优化:

    #include 
    #include
    using namespace std;int main() { int n; int count = 0; cin >> n; while (n != 1) { if (n % 2 == 0) { n /= 2; } else { n = (3 * n + 1) / 2; } count++; } cout << count; return 0;}

    代码解释:

    • 初始化变量n和计数器count
    • 读取输入的n值
    • 进入循环,当n不等于1时继续
    • 检查n是否为偶数,如果是,则将其除以2
    • 如果n是奇数,则执行(3n + 1)后再除以2
    • 每次循环结束后,计数器count增加一次
    • 当n变为1时,退出循环并输出计数器值

    这个代码在逻辑上是简单直接的,而且能够有效地计算出从任何不超过1000的正整数n到1所需的步骤数。为了确保其性能和准确性,也可以进一步考虑对大数的处理,不过在本题的限制下,直接使用这个代码即可满足需求。

    转载地址:http://bmyrz.baihongyu.com/

    你可能感兴趣的文章
    PostgreSQL学习总结(7)—— PostgreSQL 语句 INSERT INTO、SELECT、UPDATE、DELETE 等学习
    查看>>
    PostgreSQL学习总结(8)—— PostgreSQL 基于数据库和基于模式(schema)的多租户分析
    查看>>
    PostgreSQL学习总结(9)—— PostgreSQL 运算符与表达式
    查看>>
    PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
    查看>>
    PostGreSql学习笔记002---Navicat Premium中管理PostGreSql 错误:字段rolcatupdate 不存在
    查看>>
    PostgreSQL学习笔记:PostgreSQL vs MySQL
    查看>>
    PostgreSQL实现shape数据转geojson数据(地图工具篇.18)
    查看>>
    PostgreSQL导入shape数据(地图工具篇.10)
    查看>>
    PostGreSql工作笔记003---在Navicat中创建数据库时报错rolcatupdate不存在_具体原因看其他博文_这里使用pgAdmin4创建管理postgre
    查看>>
    PostGreSql工作笔记004---PostGreSql修改密码_windows和linux下修改
    查看>>
    Postgresql常用命令行操作_以及Navicat操作PostGis时的问题_自动截取长度_WKB structure does not match exp---PostgreSQL工作笔记005
    查看>>
    PostgreSQL忘记密码
    查看>>
    PostgreSQL数据库pg_dump命令行不输入密码的方法
    查看>>
    PostgreSQL新手入门
    查看>>
    postgresql树状结构查询示例
    查看>>
    PostgreSQL流复制参数max_wal_senders详解
    查看>>
    postgresql流复制配置
    查看>>
    PostgreSQL清空表并保留表结构、清空数据库还原数据库为新建时的状态的方法
    查看>>
    PostgreSQL的 initdb 源代码分析之九
    查看>>
    PostgreSQL的安装与使用指南
    查看>>