用时间换空间,然而需要的空间太大,卡在第6个样例,我觉得应该可以压缩的。
#include <stdio.h>
#include <string.h>
int const maxn = 7000000; //不知道上限在哪里
int g_a[maxn];
int g_i,g_j;
int g_ans=0;
int dfs(int i) {
if (g_a[i]!=-1) return g_a[i];
int & tmp = g_a[i];
if(i==1) {
tmp=1;
return tmp;
}
if(i%2==0) {
tmp = dfs(i/2)+1;
return tmp;
}
if (i%2==1) {
tmp = dfs(i*3+1)+1;
return tmp;
}
}
int main() {
scanf("%d%d",&g_i,&g_j);
memset(g_a,-1,sizeof(g_a));
for(int i=g_i;i<=g_j;i++) {
int k = dfs(i);
if(k>g_ans) g_ans = k;
}
printf("%d\n",g_ans);
}
朴素的暴力求解:
#include<stdio.h>
int length( int n );
int main()
{
int i, j;
int k;
int max = 0;
scanf("%d %d", &i, &j );
for ( k = i; k <= j; k++ )
{
if ( length(k) >= max )
{
max = length(k); /* 更新最大值 */
}
}
printf( "%d\n", max );
return 0;
}
int length( int n )
{
int length = 1;
while ( n != 1 )
{
if ( n % 2 == 1 )
{
n = n * 3 + 1;
}
else
{
n /= 2;
}
length++;
}
return length;
}