17.4.8.3n+1猜想、考拉兹猜想

了解 3n+1 猜想

Problem E: 六队-Guess the maximum and minimum
Description
​ Utopian发现了一个很有趣的数字游戏。

任意给定一个自然数n,按照下列规则进行变换:
如果n为偶数,n = n/2
如果n为奇数,n = 3*n+1
试猜测在变换过程中最大的n与最小的n? 并试求出从给定的n到最小的n的最少变换次数?
Input
包含多组数据。

每组数据给定一个任意的n,保证 int 类型

Output
输出三个数max,min,times。分别表示最大值,最小值,最少变换次数

Sample Input
3
9
27
Sample Output
16 1 7
52 1 19
9232 1 111
HINT
数据组数在10万左右

暂无测试数据
分析:

考拉兹猜想(英语:Collatz conjecture),又称为奇偶归一猜想、3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。

计算的话,先套一个while把偶数处理了 再嵌套while处理数字直到为1

#include
#include
#define LL long long
#define Max(a,b) (((a)>(b))?(a):(b))
using namespace std;
int main()
{
    LL n,maxn,ti;
    while(scanf("%lld",&n)!=EOF)
    {
        maxn=n;ti=0;
        while(n%2==0) n=n>>1,ti++;
        while(n!=1)
        {
            n=3*n+1;
            maxn=Max(maxn,n);
            ti++;
            while(n%2==0) n=n>>1,ti++;
        }
        if(maxn<4) maxn=4;
        printf("%lld 1 %lld\n",maxn,ti);
    }
    return 0;
}
/**************************************************************
    Problem: 1732
    User: zjut_22
    Language: C++
    Result: Accepted
    Time:224 ms
    Memory:1672 kb
****************************************************************/

你可能感兴趣的:(日常周赛)