But I have problems yet. I met WA at this time.
I used swap, and change the value of variable and the sequence of outputayaw wrote:Hope this'll help u
Code: Select all
#include <stdio.h> #define MAXNUM 100000 int g_stack[MAXNUM] = {0,}; int g_swap = 0; int main(int argc, char* argv[]) { while( 1 ) { long int nFrom, nTo; while( 2 == scanf( "%ld %ld", &nFrom, &nTo ) ) { int nMaxCount = 0; long int n; if( nFrom > nTo ) { long int temp; temp = nTo; nTo = nFrom; nFrom = temp; g_swap = 1; } if (nFrom<=837799 && nTo>=837799) { printf("%ld %ld %d\n",nFrom,nTo,525); continue; } if (nFrom<=626331 && nTo>=626331) { printf("%ld %ld %d\n",nFrom,nTo,509); continue; } if (nTo<626331 && nFrom<=511935 && nTo>=511935) { printf("%ld %ld %d\n",nFrom,nTo,470); continue; } if (nTo<511935 && nFrom<=410011 && nTo>=410011) { printf("%ld %ld %d\n",nFrom,nTo,449); continue; } if (nTo<410011 && nFrom<=230631 && nTo>=230631) { printf("%ld %ld %d\n",nFrom,nTo,443); continue; } for( n = nFrom ; n <= nTo ; n++ ) { long int nValue = n; int nCount = 0; while( 1 ) { nCount++; if( 1 == nValue ) break; else { if( nValue<MAXNUM && (g_stack[nValue] != 0) ) { nCount += g_stack[nValue]-1; break; } else { if( nValue & 1 ) nValue = nValue * 3 +1; else nValue >>= 1; } } } if( nMaxCount < nCount ) nMaxCount = nCount; if( n<MAXNUM && (g_stack[n] == 0) ) g_stack[n] = nCount; } if( g_swap ) printf( "%ld %ld %ld\n", nTo, nFrom, nMaxCount ); else printf( "%ld %ld %ld\n", nFrom, nTo, nMaxCount ); } break; } return 0; }
Why do I have problem?
and one more question.
How do experts know the range of constants?
For example,
if (nFrom<=837799 && nTo>=837799)
printf("%ld %ld %d\n",nFrom,nTo,525);