后知后觉


私信TA

用户名:2015416576

访问量:11321

签 名:

人总是要学习的,颓废了好久,现在又要重新上路了.....

等  级
排  名 5883
经  验 1485
参赛次数 0
文章发表 12
年  龄 21
在职情况 学生
学  校 qfnu
专  业 计算机科学与技术

  自我简介:

小白一枚,希望能遇到大神带我刷题。

解题思路:

为了采用规范化编程,建议把那个3n+1猜想写进一个函数,返回值是每个传入的数的循环长度。这个题思路也很简单,就是输入对于每次输入的i,j,先输出i,j,然后判断一下i和j的大小,始终让i保存最小的数,然后就写一个循环从i到j,弄一个maxlen初始化为0,循环时只要每个数最大循环长度大于maxlen,那就替换保存。



注意事项:

1、i,j的大小一定要判断,有可能i比j大,如果不判断,循环可能不执行

2、一定要先输出i,j,然后再做处理,这样才能保证i,j的输出和输入时一样,别等到最后输出i,j还有maxlen,因为途中i,j可能要改变顺序。



参考代码:

#include <iostream>

using namespace std;


int conject(int num)

{

    int len = 0;

    while (num!=1)

    {

        if (num%2==0)

            num /= 2;

        else

            num = num * 3 + 1;


        len++;

    }

    return len+1;

}

int main()

{

    int i, j;

    while (cin>>i>>j)

    {

        cout << i << " " << j << " ";

        if (i>j)

        {

            swap(i,j);

        }

        int maxlen = 0;

        for (int k=i; k<=j; k++)

        {

            if (conject(k)>maxlen)

                maxlen = conject(k);

        }


       cout << maxlen <<endl;

    }

    return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »