Constante de Kaprekar - 6174




El número 6174 es conocido como la Constante de Kaprekar en honor de su descubridor el matemático indio Dattatreya Ramachandra Kaprekar. Este número es el resultado de la aplicación repetida de la Operación de Kaprekar que consiste en los siguientes pasos:

Escoger cualquier número de cuatro dígitos (con limitadas excepciones, véase más abajo).

Ordenar los cuatro dígitos en orden ascendente, para obtener el minuendo de una resta.

Ordenar los mismos cuatro dígitos en orden descendente, para obtener el sustraendo de la misma resta.

Calcular el resto, restando el sustraendo del minuendo.

Si el resto no es igual a 6174, repetir los cuatro pasos anteriores, añadiendo ceros a la derecha al minuendo y a la izquierda al sustraendo, siempre que sea necesario para completar los cuatro dígitos.

Esta operación, repetida si es necesario en varias ocasiones (nunca más de siete veces), termina dando el resultado 6174. El proceso termina porque si se sigue repetiendo la secuencia de pasos, se sigue obteniendo el mismo resultado ya que 7641 – 1467 = 6174.

Por ejemplo, supongamos que partimos del número de cuatro dígitos 5342:

5432 – 2345 = 3087
8730 – 0378 = 8352
8532 – 2358 = 6174


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace ConstanteKaprekar_I_Forms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int numero, res, aux, max2, max3, max4, max, min, ctr, u = 0, d = 0, c = 0, m = 0, max1 = 0;

            string variabletemporal = textBox1.Text;

            if (variabletemporal != null)
            {
                numero = int.Parse(variabletemporal);

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

                    do
                    {
                        res = 0;
                        ctr = 0;

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

                        max1 = u;
                        max2 = d;
                        max3 = c;
                        max4 = m;


                        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;

                            textBox2.AppendText((max + " - " + min + " = " + (max - min)) + "\n");

                            ctr++;
                            numero = max - min;
                            if (numero == 6174)
                            {
                                ctr = 9;
                            }
                        }
                        else
                        {
                            MessageBox.Show("Error: Los números son iguales");
                            ctr = 9;
                        }
                    } while (ctr <= 7);
                }
                else
                {
                    MessageBox.Show("Error: El número no es de 4 digitos");
                }
            }
        }
    }
}



Excepciones: números de cuatro dígitos iguales, por ejemplo, el 1111, debido que su sustracción resulta en el número cero. Números de cuatro dígitos con tres números repetidos, como por ejemplo, el 1112, resultan en 999 después de una iteración de la resta, y resultarían en 0, después de una segunda, si no se añadieran ceros a la derecha al minuendo y a la izquierda al sustraendo para completar los cuatro dígitos, del siguiente modo:

2111 – 1112 = 0999
9990 – 0999 = 8991
9981 – 1899 = 8082
8820 – 0288 = 8532
8532 – 2358 = 6174

Recuerdo otra forma de explicarlo:

- Elegir un número de cuatro cifras A (no todas iguales y en el que las primeras pueden ser ceros).
- Ordenar las cifras del número A en orden creciente, generando el número B, y luego en orden decreciente, generando el número C.
- Restar ambos números: D= C-B.
- Volver a empezar pero considerando ahora el número D (en vez del número A).

Lo curioso es que independientemente del número A elegido, al final siempre se llega al mismo número.


https://es.wikipedia.org/wiki/Constante_de_Kaprekar

http://ingenieriainversa.org/

https://www.aceptaelreto.com/problem/statement.php?id=100

http://www.kumon.es/blog/magia-con-matematicas-6174-o-la-constante-de-kaprekar/

http://www.microsiervos.com/archivo/ciencia/6174.html

https://divulgadores.com/la-constante-de-kaprekar/

http://blogs.20minutos.es/mati-una-profesora-muy-particular/tag/constante-de-kaprekar/

https://hipertextual.com/2010/04/la-constante-de-kaprekar

https://matemelga.wordpress.com/2015/02/02/la-constante-de-kaprekar-6174/

https://matesmates.wordpress.com/2012/03/27/constante-de-kaprekar/

http://gaussianos.com/la-constante-de-kaprekar/

https://ztfnews.wordpress.com/2015/01/17/la-constante-de-kaprekar/

https://elabacodemadera.com/2012/10/23/la-constante-de-kaprekar/

https://plus.maths.org/content/os/issue38/features/nishiyama/index



No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.