/*#include<iostream>
using namespace std;
long int result(long int n,long int m)
{
if(n==1)
return m; //不能用递归!
else if(n%2==1)
{
n=3*n+1;
result(n,m+1);
}
else
{
n=n/2;
result(n,m+1);
}
}
int main(void)
{
long int i,n=0;
for(i=1000000;i>1;i--)
{
cout<<n<<endl;
n=(result(i,1)>n)?result(i,1):n;
}
cout<<i;
return 0;
}*/
#include <stdio.h>
int main(int argc, char **argv)
{
int longest = 0;
int terms = 0;
int i;
unsigned long j;
for (i = 1; i <= 1000000; i++)
{
j = i;
int this_terms = 1;
while (j != 1)
{
this_terms++;
if (this_terms > terms)
{
terms = this_terms;
longest = i;
}
if (j % 2 == 0)
{
j = j / 2;
}
else
{
j = 3 * j + 1;
}
}
}
printf("longest: %d (%d)\n", longest, terms);
return 0;
}
Answer:
| 837799 |