码农知识堂 - 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
  • 相关阅读:
    RL Note 1, Basic Concepts in Reinforcement Learning
    Redis之zset在异步队列上的应用
    [附源码]Python计算机毕业设计Django蛋糕购物商城
    Mongodb的分页优化及索引使用
    高可用系统架构——关于语雀宕机的思考
    nestjs listen EADDRINUSE: address already in use :::3000
    dijkstra算法python
    HP惠普暗影精灵9笔记本电脑OMEN by HP Transcend 16英寸游戏本16-u0000原厂Windows11系统
    使用new/delete动态管理内存【C/C++内存分布】
    【JavaScript】如何获取指定范围内的随机数
  • 原文地址:https://blog.csdn.net/qq_42815188/article/details/100927036
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号