miércoles, marzo 15, 2006

Constante de Kaprekar

UPDATE: Creo que no explique nada de lo que es la constante de Kaprecar. Bueno esto ya lo hicieron en otros blogs espero que lo lean antes de leer el resto de este post.

Después de leer sobre la constante de Kaprekar en algunos blogs, me decidí a hacer un programa que me ayudara a hacer el cálculo para números con mas de 4 dígitos. Para no hacer el cuento largo aquí pongo algunos resultados que me dio el programa.

Para 3 dígitos:
987 - 789 = 198
981 - 189 = 792
972 - 279 = 693
963 - 369 = 594
954 - 459 = 495
Constante 495

Pero probé con otros números al azar en su mayoría me dio la misma constante hasta que llegue por casualidad al numero 788 con el cual me entrega este resultado:
887 - 788 = 99
99 - 99 = 0

Con números de 4 dígitos siempre me dio la misma constante que es la que manejan los demás sitios (6174) por lo tanto no pongo los resultados

Con números de 6 dígitos en algún momento me dio como resultado este ciclo:
886320 - 23688 = 862632
866322 - 223668 = 642654
665442 - 244566 = 420876
876420 - 24678 = 851742
875421 - 124578 = 750843
875430 - 34578 = 840852
885420 - 24588 = 860832

Con números de 8, 9 y 10 dígitos también me dio ciclos
De 8 dígitos:
86654430 - 3445668 = 83208762
88763220 - 2236788 = 86526432
86654322 - 22345668 = 64308654

De 9 dígitos:
986554332 - 233455689 = 753098643
987654330 - 33456789 = 954197541
997554411 - 114455799 = 883098612
988863210 - 12368889 = 976494321
997644321 - 123446799 = 874197522
987754221 - 122457789 = 865296432
986654322 - 223456689 = 763197633
977663331 - 133366779 = 844296552
986554422 - 224455689 = 762098733
987763320 - 23367789 = 964395531
996554331 - 133455699 = 863098632
988663320 - 23366889 = 965296431
996654321 - 123456699 = 873197622
987763221 - 122367789 = 865395432

De 10 dígitos:
8866543320 - 233456688 = 8633086632
8866633320 - 233366688 = 8633266632
8666633322 - 2233366668 = 6433266654
6666544332 - 2334456666 = 4332087666
8766643320 - 233466678 = 8533176642
8766543321 - 1233456678 = 7533086643
8766543330 - 333456678 = 8433086652

Por lo tanto realmente no creo que sea un ciclo para todos los casos, seguramente pueden haber números con los cuales no se cumple lo de la constante como es el caso de los de 3 dígitos.

Tomando en cuenta el resultado que me dio el programa con números de 6 o más dígitos. Tampoco puedo decir que sea una constante ya que varía siempre en mayor o menor medida.

Para los que les interese más de este tema encontré un blog dedicado a las series de Kaprekar y un programa en java que trabaja con esas series.

El primer lugar donde vi lo de las series de Kaprekar fue: ... hmmm ...

El código de mi programita, aunque no esta optimizado (Se termina cuando ejecuta el ciclo 100000 veces, no detecta cuando detenerse) pueden pedirlo a mi correo o dejar un comentario con su dirección solicitando el programa.

4 Comments:

Anonymous Anónimo said...

Amigo tasre loco!

11:27 p.m.  
Blogger g. said...

uyyyyy !!! Qué difícil !!! Es que yo soy de letras, glups...

2:16 a.m.  
Anonymous Anónimo said...

Para tres cifras también se cumple en todos los casos. Con el número 887 que tú planteas, has de restar 887 - 778 = 099; los números a restar serán 990 y 099 (hay que completar por la izquierda con ceros los números menores de tres cifras) con lo que el ciclo te llevará al 495.

3:58 a.m.  
Blogger Didier Cordoba said...

/*
Adaptado a java en NeBeans por Didier Cordoba
drcordoba92@Gmail.com
*/
package kaprekar;

import java.util.Scanner;

public class Kaprekar {

public static void main(String[] args) {

int a = 0, b = 0, c = 0, d = 0, res, aux, max1 = 0, max2, max3, max4, max, min, ctr;
System.out.println("Ingrese un numero de 4 digitos diferentes: ");
int numero;
Scanner entradaScanner = new Scanner(System.in);
numero = entradaScanner.nextInt();
System.out.println("Idatos: " + numero);

if (numero > 999 && numero <= 9999) {
do {

res = 0;
ctr = 0;

aux = 0;
a = 0;
b = 0;
c = 0;
d = 0;

while (numero > 10) {
res = numero % 10;
switch (aux) {
case 0: {
a = res;
aux++;
break;
}
case 1: {
b = res;
aux++;
break;
}
case 2: {
c = res;
aux++;
break;
}
}
numero /= 10;
}
d = numero;

max1 = a;
max2 = b;
max3 = c;
max4 = d;
if (max1 != max2 || max2 != max3 || max3 != max4) {
int k = 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;
}
k++;
} while (k <= 3);
max = max1 * 1000 + max2 * 100 + max3 * 10 + max4;
min = max4 * 1000 + max3 * 100 + max2 * 10 + max1;

System.out.println("\n" + max + " " + min);

ctr++;
numero = max - min;

if (numero == 6174) {
ctr = 11;
}

} else {
System.out.println("\n Error: Los numeros son iguales ");
ctr = 9;
}
} while (ctr <= 7);
} else {
System.out.println("\nError: Elnumero no es de 4 digitos");
}
System.out.println("\n Constante Kaprecar: " + numero);
}
}

12:14 p.m.  

Publicar un comentario

<< Home