博客
关于我
热身题A——The 3n + 1 problem
阅读量:201 次
发布时间:2019-02-28

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

为了解决这个问题,我们需要计算给定范围内每个数的循环长度,并找出最大值。我们将利用记忆化技术来优化计算过程,避免重复计算,提高效率。

方法思路

  • 问题分析:给定一个数n,按照特定步骤进行循环,直到得到1。我们需要计算每个数的循环长度,并找出给定范围内最大的循环长度。
  • 记忆化技术:使用一个数组记录每个数的循环长度,避免重复计算,提高效率。
  • 生成数处理:对于每个数k,处理其生成的数(3k+1和2k),预先记录它们的循环长度,进一步优化计算。
  • 解决代码

    #include 
    #include
    using namespace std;int find(int n, vector
    & vis, int i, int j) { if (n == 1) return 1; if (vis[n] != 0) return vis[n]; vis[n] = 1; // 初始化循环长度为1 if (n % 2 == 1) { int next = 3 * n + 1; if (next >= i && next <= j) { vis[next] = vis[n] - 1; // 预处理3k+1的长度 } } else { int next = 2 * n; if (next >= i && next <= j) { vis[next] = vis[n] + 1; // 预处理2k的长度 } } int cnt = 1; while (true) { n = (n % 2 == 1) ? 3 * n + 1 : n / 2; cnt++; if (n == 1) break; } vis[n] = cnt; return cnt;}int main() { vector
    vis(1000001, 0); // vis[i]存储i的循环长度 int i, j, max_len; while (true) { cin >> i >> j; if (i > j) swap(i, j); max_len = 0; for (int k = i; k <= j; ++k) { if (vis[k] == 0) { // 未计算过 int len = find(k, vis, i, j); if (len > max_len) max_len = len; } } cout << i << ' ' << j << ' ' << max_len << endl; }}

    代码解释

  • find函数:计算给定数n的循环长度,使用记忆化数组vis记录结果。
  • 预处理生成数:对于每个数k,处理其生成的数(3k+1和2k),预先记录它们的循环长度。
  • 主函数:读取输入,处理每个范围,计算并输出最大循环长度。
  • 通过这种方法,我们可以高效地处理大范围内的查询,避免重复计算,提高了性能。

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

    你可能感兴趣的文章
    Oracle BMW Racing sailing vessel帆船图
    查看>>
    ORACLE Bug 4431215 引发的血案—原因分析篇
    查看>>
    Oracle Business Intelligence Downloads
    查看>>
    Oracle cmd乱码
    查看>>
    Oracle Corp甲骨文公司推出Oracle NoSQL数据库2.0版
    查看>>
    【Docker知识】将环境变量传递到容器
    查看>>
    uniapp超全user-agent判断 包括微信开发工具 hbuilder mac windows 安卓ios端及本地识别
    查看>>
    Oracle DBA课程系列笔记(20)
    查看>>
    oracle dblink 创建使用 垮库转移数据
    查看>>
    oracle dblink结合同义词的用法 PLS-00352:无法访问另一数据库
    查看>>
    Oracle dbms_job.submit参数错误导致问题(ora-12011 无法执行1作业)
    查看>>
    oracle dg switchover,DG Switchover fails
    查看>>
    Oracle E-Business Suite软件 任意文件上传漏洞(CVE-2022-21587)
    查看>>
    Oracle EBS OPM 发放生产批
    查看>>
    Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
    查看>>
    Oracle EBS环境下查找数据源(OAF篇)
    查看>>
    oracle Extract 函数
    查看>>
    uni-app开发环境自动部署的一个误区(App running at...)
    查看>>
    Oracle GoldenGate Director安装和配置(无图)
    查看>>
    Oracle Goldengate在HP平台裸设备文件系统OGG-01028处理
    查看>>