AcWing 3155. 冰雹数
原题链接
简单
作者:
Winkel
,
2021-03-23 18:50:35
,
所有人可见
,
阅读 623
#include<iostream>
using namespace std;
long long n;
long long get(long long x)
{
long long res = x;
while(x != 1)
{
x % 2 ? x = 3 * x + 1 : x /= 2;
if(x > res) res = x;
}
return res;
}
int main()
{
cin >> n;
long long res = 1;
long long t;
if(n > 2)
{
long long i = n / 2; //从n的一半开始枚举
if(i % 2 == 0) i++; //如果n的一半是偶数,加1变成奇数,只有奇数才会增大,更有可能找到最大值
for(; i <= n; i += 2)
{
t = get(i);
if(t > res) res = t;
}
}
else res = n;
cout << res;
return 0;
}
为啥要n>2呢
n=2的时候会输出1
为什么只从n的一半开始枚举呢?
很nice,以后一起学习