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<iostream>
#include<cstdio>
#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
****************************************************************/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值