首页 > 其他分享 >冰雹数

冰雹数

时间:2024-06-20 19:32:43浏览次数:22  
标签:max ll 冰雹 整数 long 最大值 3n

题目描述

72052c774d0b4970ad14b04dae3a04a1.png

输入描述

6b9493dd807244558abd4a7ff24a7451.png

输 出描述

输出一个正整数,表示不大于 N 的数字,经过冰雹数变换过程中,最高冲到了多少。

输入输出样例

示例

输入

10

输出

52
``·

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 1194  |  总提交次数: 2468  |  通过率: 48.4%

难度: 困难   标签: 2016, 模拟, 省赛

代码:

#include <stdio.h>

typedef long long ll;

int main() {
    ll max = 0, n, i, N;

    // 从标准输入读取一个整数 N
    scanf("%lld", &N);

    // 外层循环,遍历从2到N的每一个整数
    for (i = 2; i <= N; i++) {
        n = i;  // 将 n 初始化为当前的 i

        // 使用while循环,直到 n 变为 1
        while (n != 1) {
            if (n % 2 == 0) {
                n /= 2;  // 如果 n 是偶数,则除以2
            } else {
                n = n * 3 + 1;  // 如果 n 是奇数,则进行3n+1操作
            }
            
            // 更新 max 的值,记录出现的最大值
            if (n > max) {
                max = n;
            }
        }
    }

    // 输出找到的最大值 max
    printf("%lld\n", max);

    return 0;
}

代码分析:

  1. 数据类型和变量声明

    • typedef long long ll;:定义了 ll 作为 long long 类型的别名,用于处理大整数。
    • ll max = 0, n, i, N;:声明了四个 ll 类型的变量,max 用于记录每个序列中出现的最大值,n 用于进行3n+1操作,i 用于循环计数,N 用于存储从标准输入读取的整数。
  2. 循环结构

    • for (i = 2; i <= N; i++) { ... }:外层循环从2开始,逐步增加到N,对每个整数进行处理。
    • n = i;:将 n 初始化为当前的整数 i
  3. 3n+1操作的计算

    • while (n != 1) { ... }:内层循环,直到 n 变为1。
    • if (n % 2 == 0) { n /= 2; }:如果 n 是偶数,则将 n 除以2。
    • else { n = n * 3 + 1; }:如果 n 是奇数,则进行3n+1操作。
  4. 记录最大值

    • if (n > max) { max = n; }:在每次迭代中,更新 max 的值,记录当前序列中的最大值。
  5. 输出结果

    • printf("%lld\n", max);:最终输出找到的最大值 max

总结:

这段代码的目的是找出从2到给定整数 N 中任意整数开始,按照3n+1规则最终生成的序列中的最大值。它通过遍历每个整数,使用循环计算直到序列达到1,并在计算过程中记录并更新出现的最大值。

 

标签:max,ll,冰雹,整数,long,最大值,3n
From: https://blog.csdn.net/weixin_62881069/article/details/139816639

相关文章