UVa - 100 The 3n+1 Problem

#include<stdio.h>

#define SWAP(X, Y) do { typeof(X) TMP = X; X = Y; Y = TMP; } while (0)

unsigned long tmp,max,k,t;

unsigned long cycleLen(unsigned long i,unsigned long n,unsigned long cnt)
{

    if(i==1) { return cnt; }

    if(i%2 == 0) return cycleLen(i/2,n,cnt+1);

return cycleLen(3*i+1,n,cnt+1);
}


unsigned long mxLen(unsigned long i,unsigned long j)
{
    if(i>j) SWAP(i,j);

    max=cycleLen(i,i,0)+1;

    for(k=i+1;k<=j;k++){
        t=cycleLen(k,k,0)+1;
        if(max<t) max=t;
    }
    return max;
}

int main()
{
    unsigned long i,j,mx;
    //freopen("INPUT.TXT","r",stdin);
    //freopen("OUTPUT.TXT","w",stdout);

    while(scanf("%lu%lu",&i,&j)==2)
    {
        mx=mxLen(i,j);
        printf("%lu %lu %lu\n",i,j,mx);
    }
    return 0;
}

No comments:

Post a Comment