http://oj.ecustacm.cn/problem.php?id=1295
解析: 题目的意思模糊不清。
题目的意思是输入一个N 从 2 ~ N 中 的每一个数 执行冰雹的翻滚,循环直到等于1退出循环。
找到这些中冰雹最大的数。
#include<cstdio>
int main(void)
{
long long int n;
long long int max;
long long int temp;
while( scanf("%lld",&n) != EOF )
{
max=-1;
for(int i=2;i<=n;i++)
{
temp=i;
while(temp!=1)
{
if(temp%2==0)
{
temp=temp/2;
}
else
{
temp=temp*3+1;
}
if(temp>max)
{
max=temp;
}
}
}
printf("%lld\n",max);
}
return 0;
}
简化版:
思路:
偶数的都不要都是之前已经算过的了。
例 10/2==5 5之前已经算过了。
#include<cstdio>
int main(void)
{
long long int n;
long long int max;
long long int temp;
int index=0;
while( scanf("%lld",&n) != EOF )
{
max=-1;
for(int i=3;i<=n;i=i+2)
{
temp=i;
while(temp>=i)//如果 temp<i 那么就是之前算过的
{
temp=temp*3+1;
if(temp>max)
max=temp;
while(temp%2==0)
temp=temp/2;
}
}
printf("%lld\n",max);
}
return 0;
}