【HDU1032】一个有关3n+1问题的题目

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1032

一、题目要求

1)给出一个正整数n,如果n为奇数,则n=3n+1,否则n=n/2

2)设数n按1)中的运算方式,最少经过CollatzStep(n)次运算能够变成1

3)现给出两个正整数i和j,问数i和j之间所有数字里函数CollatzStep(n)可取到的最大值

需要注意的是:

1)i与j的大小关系是不一定的

2)最后输出结果时数字i和j需要按照顺序输出

二、程序代码

#include<iostream>

using namespace std;

//计算一个正整数经过奇偶归一猜想多少步可以到1
int CollatzStep(int n)
{
    int step = 1;
    while(n != 1)
    {
        if(n % 2)
        {
            n = 3 * n + 1;
        }
        else
        {
            n /= 2;
        }
        step++;
    }
    return step;
}

int main()
{
    int i, j, cur; //最小值i,最大值j,cur用来进行从i到j的遍历
    int temp;      //临时变量
    int curstep;   //数字cur迭代到1所花费的步数
    int maxstep;   //从i到j所有数字需花费的最大迭代步数

    while(cin >> i >> j)
    {
        //统计最大迭代步数
        maxstep = 0;
        for(cur = (i > j ? j : i); cur <= (i > j ? i : j); cur++)
        {
            curstep = CollatzStep(cur);
            maxstep = curstep > maxstep ? curstep : maxstep;
        }

        //输出结果
        cout  << i << ' ' << j << ' ' << maxstep << endl;    
    }
    
    return 0;
}

END

你可能感兴趣的:(HDU1032)