码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PAT乙级 1001 害死人不偿命的(3n+1)猜想


    文章目录

    • 题目描述
      • 输入格式
      • 输出格式
      • 输入样例
      • 输出样例
    • 题目解析
      • 思路
      • 位运算
    • C/C++代码

    题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805325918486528

    题目描述

    卡拉兹(Callatz)猜想:

    对任何一个正整数 n n n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 ( 3 n + 1 ) (3n+1) (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n = 1 n=1 n=1。卡拉兹在 1950 1950 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 ( 3 n + 1 ) (3n+1) (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

    我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 1000 1000 的正整数 n n n,简单地数一下,需要多少步(砍几下)才能得到 n = 1 n=1 n=1 ?

    输入格式

    每个测试输入包含 1 1 1 个测试用例,即给出正整数 n n n 的值。

    输出格式

    输出从 n n n 计算到 1 1 1 需要的步数。

    输入样例

    3
    
    • 1

    输出样例

    5
    
    • 1

    题目解析

    思路

    本题属于简单模拟题。

    根据题意,在 while 循环中分别对奇数和偶数进行不同的操作,同时记录循环的次数。while 循环退出时,输出循环次数即可。

    位运算

    位运算的好处是速度极快,其运行效率比除法、取余高很多。

    判断 n n n 是奇数:n % 2 == 1 或 n & 1 == 1

    判断 n n n 是偶数:n % 2 == 0 或 n & 1 == 0

    n n n 乘以 2 2 2 :n = n * 2 或 n = n << 1

    n n n 除以 2 2 2 :n = n / 2 或 n = n >> 1

    C/C++代码

    #include 
    
    using namespace std;
    
    int main()
    {
        int n;
        cin >> n;
        
        int cnt = 0;
        while (n != 1)
        {
            if (n & 1) n = (3 * n + 1) >> 1;
            else n = n >> 1;
            cnt++;
        }
        
        cout << cnt << endl;
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    ArrayList详解
    SpringBoot+Vue项目篮球竞赛预约平台
    0基础如何学习软件测试?10分钟给你安排明白
    异构AI算力操作平台的架构设计与优化策略
    threejs (二) 相机
    jquery表单验证
    web前端期末大作业 基于HTML+CSS+JavaScript学生宿舍管理系统
    蒙特卡洛策略梯度(REINFORCE算法)及其改进
    R语言如何写一个爬虫代码模版
    vcomp100.dll丢失的解决方法,一键修复vcomp100.dll丢失问题
  • 原文地址:https://blog.csdn.net/qq_42815188/article/details/100927036
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号