50 译文1095:3n +1问题

译文1095:3n +1问题

时间限制:1秒内存限制:64MB提交:9228解决:2551

译文描述
考虑以下算法来生成数字序列。以整数n开头。如果n为偶数,则除以2。如果n为奇数,则乘以3并加1。以新的n值重复此过程,在n = 1时终止。例如,将为n生成以下数字序列= 22:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1据推测(但尚未证明),对于每个整数n,该算法都将在n = 1处终止。尽管如此,猜想仍然适用于所有至少为1,000,000的整数。对于输入n,n的循环长度是生成的数字的数量,直到1(包括1)。在上面的示例中,循环长度22中的16是16。给定两个数字i和j,您将确定i和j之间所有数字(包括两个端点)的最大循环长度。
输入

输入将包含一系列成对的整数i和j,每行一对整数。所有整数将小于1,000,000并大于0。

输出

对于每对输入整数i和j,按照它们在输入中出现的顺序输出i,j,然后输出介于i和j之间(包括i和j)的整数的最大循环长度。这三个数字应以一个空格分隔,所有三个数字在一行上,每行输入对应一个输出行。

样例输入

1 10
100 200
201 210
900 1000

样例输出

1 10 20
100 200 125
201 210 89
900 1000 174

代码

def f(n):
    re=1
    while n!=1:
        if n%2==0:
            n=n//2
        else:
            n=n*3+1
        re+=1
    return re
while True :
    i,j=map(int,input().strip().split())
    temp=[]
    for k in range(min(i,j),max(i,j)+1):
        temp.append(f(k))
    print(i,j,max(temp))   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值