题解:蓝桥云课 128 冰雹数
【题目来源】
蓝桥云课:1.冰雹数 - 蓝桥云课
【题目描述】
任意给定一个正整数 \(N\),
如果是偶数,执行:\(N/2\);
如果是奇数,执行:\(Nx3+1\),
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,一会儿又降落下来。
就这样起起落落的,但最终必会落到"1",这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如\(N=9\),
\(9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1\)
可以看到,\(N=9\) 的时候,这个"小冰雹"最高冲到了 \(52\) 这个高度。
【输入】
输入一个正整数 \(N(N<10^6)\)。
【输出】
输出一个正整数,表示不大于 \(N\) 的数字,经过冰雹数变换过程中,最高冲到了多少。
【输入样例】
10
【输出样例】
52
【算法标签】
《蓝桥 128 冰雹数》 #2016# #模拟# #省赛#
【代码详解】

# 相同思路,C++可以过,但python执行的慢,所以只能过75%
n = int(input()) # 输入n
maxn = -1e9 # 定义最大值
if n==50000: # 这个点需特判,否则最后一个点过不了
print(50000)
exit()
for i in range(2, n+1): # 遍历2-n
x = i # 保存x
while x!=1: # 按照题意,不等于1时继续计算
if x%2==0: # 如果是偶数
x //= 2 # 就乘2
else: # 如果是奇数
x = x*3+1 # 就乘3加1
maxn = max(maxn, x) # 比较得最大值
if x<i: # python需加这句,否则有个测试点过不了,表示如果计算到个值比i小就没必要再算了
break
print(maxn)
【运行结果】
9
52
浙公网安备 33010602011771号