I don't understand why my code doesn't work.
I keep getting WA. Can you see anything wrong?
[c]
#include <stdio.h>
#include <string.h>
#define TABLE_SIZE 2500000
unsigned short s_length[TABLE_SIZE];
unsigned short cycleLength(unsigned long n) {
unsigned short length = (n > TABLE_SIZE) ? 0 : s_length[n];
if( length == 0 ) {
/* cycle length of n not computed yet */
if( n & (unsigned int)1 ) {
/* odd */
length = 1 + cycleLength(3 * n + 1);
}else {
/* even */
length = 1 + cycleLength(n / 2);
}
if( n < TABLE_SIZE ) {
s_length[n] = length;
}
}
return length;
}
int main() {
unsigned int i, j, k;
unsigned short max;
unsigned short length;
memset(s_length, 0, sizeof(s_length));
s_length[1] = 1;
while( scanf(" %u %u", &i, &j) == 2 ) {
max = 0;
if( i > j ) {
k = i;
i = j;
j = k;
}
for(k = i ; k <= j; k++) {
length = cycleLength(k);
if( length > max ) {
max = length;
}
}
printf("%d %d %d\n", i, j, max);
}
return 0;
}
[/c]