zoukankan      html  css  js  c++  java
  • 欧拉计划第14题题解

    Longest Collatz sequence

    The following iterative sequence is defined for the set of positive integers:

    n → n/2 (n is even)
    n → 3n + 1 (n is odd)

    Using the rule above and starting with 13, we generate the following sequence:

    13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

    It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.

    Which starting number, under one million, produces the longest chain?

    NOTE: Once the chain starts the terms are allowed to go above one million.

    最长考拉兹序列

    在正整数集上定义如下的迭代序列:

    n → n/2 (若n为偶数)
    n → 3n + 1 (若n为奇数)

    从13开始应用上述规则,我们可以生成如下的序列:

    13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

    可以看出这个序列(从13开始到1结束)共有10项。尽管还没有被证明,但我们普遍认为,从任何数开始最终都能迭代至1(“考拉兹猜想”)。

    从小于一百万的哪个数开始,能够生成最长的序列呢?

    注: 序列开始生成后允许其中的项超过一百万。

    解题思路

    本来想记忆化搜索,但是感觉数的范围不能确定。
    所以直接就用递归实现了。
    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 55;
    int f(long long n) {    // 返回经过多少次变成1
        if (n == 1) return 1;
        if (n%2) return 1 + f(3*n+1);
        else 1 + f(n/2);
    }
    void output(long long n) {  // 输出变化方案
        if (n == 1) {
            cout << n << endl;
            return;
        }
        cout << n << " → ";
        if (n%2) output(3*n+1);
        else output(n/2);
    }
    int main() {
        int n = 0, ans = 0;
        for (int i = 1; i < 1000000; i ++) {
            int tmp = f(i);
            if (tmp > ans) {
                n = i;
                ans = tmp;
            }
        }
        cout << n << " , " << ans << endl;
        // output(n);
        return 0;
    }
    

    100万之内最小的数字是 837799 , 它一共经历了 196 次才变成 1。

  • 相关阅读:
    请为新诗赐题
    ***套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的
    关于sum(int)报错:将expression转化为数据类型int时发生算术溢出错误
    【SSB】清空service broker中的队列
    【SSB 】Handling and Removing Poison Messages
    一淘网的系统架构
    WCF服务器已拒绝客户端凭据
    Web 安全威胁与对策
    SQL Prompt 4 破解步骤
    【SSB】Activation Execution Context
  • 原文地址:https://www.cnblogs.com/quanjun/p/12327806.html
Copyright © 2011-2022 走看看