3n+1数链问题

来源:互联网 发布:盘扣式脚手架计算软件 编辑:程序博客网 时间:2024/06/07 16:16

用时间换空间,然而需要的空间太大,卡在第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;}
0 0
原创粉丝点击