/* Para cada numero n en un rango 1... N, el programa determina el numero de pasos en que termina el proceso "3x+1" que empieza con n; este proceso se define de la manera siguiente: se transforma cualquer entero positivo x al numero x/2 si x es par, y a 3x+1 si x es impar. El proceso termina cuando llegamos a x=1. Es un problema abierto todavia si el proceso siempre termina (la conjetura es que si, basado en experimentos con n muy grande, pero nadie lo ha demostrado; busca en Wikipedia "Collatz conjecture"). */ #include int cuantos_pasos(int ); int next(int ); main( ) { int n, N ; printf("\n\nN= "); scanf("%d", &N); for(n=1;n<=N;n++) { printf("%3d, ", cuantos_pasos(n)); if (n%10==0) printf("\n"); } } int cuantos_pasos(int n) { int contador; for(contador=1; n>1; contador++) n=next(n); return contador; } int next(int n) { if (n%2) return 3*n+1; else return n/2; }