• UVA100 POJ1207 HDU1032 The 3n + 1 problem


    问题链接:UVA100 POJ1207 HDU1032 The 3n + 1 problem

    问题描述参见上述链接。

    问题分析根据给定的算法计算整数循环到1的次数,可以用一个函数来实现,可以使用记忆存储来加快计算速度

    程序说明:数组cs[]用于存储已经算过的次数,极大地加快了计算速度。程序中,统计函数cscount()是用递归实现的,如果用递推实现,速度会更快。

    AC的C++语言程序如下:

    /* UVA100 POJ1207 HDU1032 The 3n + 1 problem */
    
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    const int MAXN = 1000000;
    
    int cs[MAXN+1];
    
    // Collatz sequence count
    int cscount(int x)
    {
        if(x <= MAXN && cs[x])
            return cs[x];
    
        int count;
        if(x % 2 == 0)
            count = 1 + cscount(x / 2);
        else
            count =  1 + cscount(x * 3 + 1);
    
        if(x <= MAXN)
            cs[x] = count;
    
        return count;
    }
    
    int main()
    {
        int a, b, max, temp;
    
        memset(cs, 0, sizeof(cs));
        cs[1] = 1;
    
        while(cin >> a >> b) {
            cout << a << " " << b << " ";
    
            if(a > b) {
                temp = a;
                a = b;
                b = temp;
            }
    
            max = 0;
            for(int i=a; i<=b; i++) {
                temp = cscount(i);
                if(temp > max)
                    max = temp;
            }
    
            cout << max << endl;
        }
    
        return 0;
    }



  • 相关阅读:
    抱歉
    The area
    sort
    Problem D
    Problem B
    错排
    第8集 仪表开关电源照明原理图
    第7集 驱动与电气原理图绘制
    第6集 初步使用EPLAN部件库部件功能
    第5集 软件中建立项目结构
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563998.html
Copyright © 2020-2023  润新知