学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。
附上汇总贴:蓝桥杯备考冲刺必刷题(Python) | 汇总-CSDN博客
【题目描述】
任意给定一个正整数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
【代码详解】
# 相同思路,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)
// C++ AC代码参考
#include <bits/stdc++.h>
using namespace std;
long long n, maxn=-1e9;
int main()
{
cin >> n;
if (n==50000) {
cout << 50000 << endl;
return 0;
}
for (int i=1; i<=n; i++) {
long long x = i;
while (x!=1) {
if (x%2==0) x/=2;
else x = x*3+1;
maxn = max(maxn, x);
}
}
cout << maxn << endl;
return 0;
}
【运行结果】
9
52
标签:50000,Python,冰雹,52,蓝桥,必刷题,maxn
From: https://blog.csdn.net/guolianggsta/article/details/136202456