这题暴力枚举能过,但是如果数据量再大一点呢?
建一个vis数组,标识每个值是否被访问过,如果访问过就不再枚举,同时在循环的时候表示被访问到的值。
def main():
ori=eval(input())
if ori==1:#特殊情况特殊处理
print(1)
return
vis=[0]*(ori+1)
vis[1]=1
ans=0
for i in range(1,ori+1):
if vis[i]:
continue
curn=i
while curn!=1:
if curn<=ori:#只能标识比n小的值
vis[curn]=1
ans=max(ans,curn)#更新
if curn&1:
curn=curn*3+1
else:
curn=int(curn/2)
print(ans)
main()