me han mandado de actividad hacer la constante de Kapreker dandome este problema:
PROBLEMA: Desarrolla en Lenguaje C el siguiente problema: Constante de Kaprekar El matemático indio Dattaraya Ramchandra Kaprekar descubrió en 1949 una curiosa característica del número 6174. Hoy, se conoce a dicho número como constante de Kaprekar en honor a él. El número es notable por la siguiente propiedad: 1. Elige un número de cuatro dígitos que tenga al menos dos diferentes (es válido colocar el dígito 0 al principio, por lo que el número 0009 es válido). 2. Coloca sus dígitos en orden ascendente y en orden descendente para formar dos nuevos números. Puedes añadir los dígitos 0 que necesites al principio. 3. Resta el menor al mayor. 4. Vuelve al paso 2. A este proceso se le conoce como la rutina de Kaprekar, y siempre llegará al número 6174 en, como mucho, 7 iteraciones. Una vez en él, el proceso no avanzará, dado que 7641 − 1467 = 6174. Por ejemplo, el número 3524 alcanzará la constante de Kaprekar en 3 iteraciones:
5432 − 2345 = 3087
8730 − 0378 = 8352
8532 − 2358 = 6174
Los únicos dígitos de cuatro cifras para los que la rutina de Kaprekar no alcanza el número 6174 son los repdigits, es decir aquellos cuyas cuatro cifras son iguales (como 1111), pues en la primera iteración se alcanzará el valor 0 y no podrá salirse de él. Es por esto que en el paso 1 se pedía explícitamente que el número inicial tuviera al menos dos dígitos diferentes. El resto de los números de cuatro cifras terminarán siempre en el número 6174. A continuación se muestran dos ejemplos más: · El número 1121 necesita 5 iteraciones:
2111 − 1112 = 0999
9990 − 0999 = 8991
9981 − 1899 = 8082
8820 − 0288 = 8532
8532 − 2358 = 6174
· El número 1893 necesita 7:
9831 − 1389 = 8442
8442 − 2448 = 5994
9954 − 4599 = 5355
5553 − 3555 = 1998
9981 − 1899 = 8082
8820 − 0288 = 8532
8532 − 2358 = 6174
El problema es que encontré este codigo en internet:
Código:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int numero, n1=0,n2=0,n3=0,n4=0,aux,i,i2,max1=0,max2,max3,max4,numas,numdes;
char s, n;
int main()
{
printf("Programa para la constante Kaprekar");
printf("\n ingresa un numero de 4 digitos \n");
scanf ("%d",&numero);
if(numero>999 && numero <=9999)
{
printf ("\n Resultados \n");
do
{
i2=0; i=0;
aux=0;n1=0;n2=0;n3=0;n4=0;
while(numero>10)
{
i2=numero%10;
switch(aux)
{
case 0:{n1=i2;aux ++ ; break;}
case 1:{n2=i2;aux ++ ; break;}
case 2:{n3=i2;aux ++ ; break;}
}
numero/=10;
}
n4=numero;
max1=n1; max2=n2; max3=n3; max4=n4;
if (max1!=max2||max2!=max3||max3!=max4 )
{
int i3=0;
do
{
if (max1<=max2)
{
aux=max1;
max1=max2;
max2=aux;
}
if(max1>=max2 && max2<=max3)
{
aux=max2;
max2=max3;
max3=aux;
}
if (max1>=max2 && max2 >=max3 && max3<=max4)
{
aux=max3;
max3=max4;
max4=aux;
}
i3++;
}
while(i3<=3);
numas=max1*1000+max2*100+max3*10+max4;
numdes=max4*1000+max3*100+max2*10+max1;
printf("%d - %d= %d \n",numas,numdes,numas-numdes);
i++;
numero=numas-numdes;
if(numero==6174)
i=9;
else(1000);
}
else
{
printf ("Repdigit, intente denuevo ");
i=9;
}
}while(i<=7);
}
else
{
printf ("el valor tiene mas o menos de 4 digitos");
}
printf("fin del programa, presiona s para limpiar pantalla");
scanf("%s", &s);
system("cls");
system("pause");
return 0;
}
quisiera saber si alguien me explica bien este codigo? ya que hay cosas que no logro entender :c también se dice que los números deben ir siempre de 4 digitos pero aveces introduzco un número la combinación de 4 digitos y entre los resultados hay varios de solo 3 o 2 digitos entonces esta mal :/, también cuando pongo el 1001 por ejemplo se va a un ciclo infinito salen un montón de números y nunca se detiene.
Agradecería muchisimo a quien pueda ayudarme con esto por favor, les agradezco mucho de antemano