译文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))