Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   La Taberna (https://www.clubdelphi.com/foros/forumdisplay.php?f=40)
-   -   Jugando con los numeros (https://www.clubdelphi.com/foros/showthread.php?t=39230)

seoane 13-01-2007 23:05:35

Jugando con los numeros
 
Bueno, aquí va otro pasatiempo matemático ...

Escoge cuatro dígitos al azar (que no sean los cuatro iguales), y forma con ellos el mayor numero posible y el menor numero posible. Ahora al mayor restale el menor. Con los dígitos del numero resultante de la resta vuelve a repetir la operación.

Por ejemplo:
Código:

Las cifras -> 1,2,3,4
El numero mayor -> 4321
El numero menor -> 1234
La resta -> 4231 - 1234 = 3087

Las cifras -> 3,0,8,7
El numero mayor -> 8730
El numero menor -> 0378
La resta -> 8730 - 0378 = 8352

{Repite la operacion unas cuantas veces, 4 o 5 veces sera sufciente}

Ahora deja que me concentre :p ........ ya puedo verlo, el resultado es: 6174

































Bien, después de la tontería, la explicación :p . A la operación anterior se le llama "Operacion de Kaprekar", y para cuatro dígitos el único numero que se mantiene igual después de aplicarle la operación es el 6174, uno de esos números misteriosos. Es mas, si se realiza esta operación el numero suficiente de veces sobre cualquier numero, siempre termina dando como resultado el número misterioso. Si alguien quiere saber el por que, en el enlace anterior lo explican con un sistema de 4 ecuaciones, para el que la única solución entera es el famoso 6174 :eek:

Pero como siempre digo, delphi vale para cualquier cosa, así que ahí va un poco de código para la demostración empírica:
Código Delphi [-]
function Kaprekar(n: integer): integer;
var
  Str: string;
  i,j: integer;
  c: char;
begin
  Str:= Format('%.4d',[n]);
  for i:= 1 to Length(Str) do
    for j:= Length(Str) downto i + 1 do
      if Str[i] < Str[j] then
      begin
        c:= Str[i];
        Str[i]:= Str[j];
        Str[j]:= c;
      end;
  Result:= StrToInt(Str);
  j:= Length(Str);
  for i:= 1 to Length(Str) div 2 do
  begin
    c:= Str[i];
    Str[i]:= Str[j];
    Str[j]:= c;
    dec(j);
  end;
  Result:= Result - StrToInt(Str);
end;

//Por ejemplo
ShowMessage(IntToStr(Kaprekar(1234)));

Ahora vamos a por la serie:
Código Delphi [-]
function SerieKaprekar(n: integer): string;
var
  i: Integer;
begin
  Result:= EmptyStr;
  if (n > 9999) or (n < 0)  then
    Exit;
  repeat
    Result:= Result + Format('%.4d',[n]) + #13#10;
    i:= n;
    n:= Kaprekar(n);
  until n=i;
end;

// Por ejemplo
ShowMessage(SerieKaprekar(1234));

Podéis hacer pruebas con cualquier número de cuatro cifras (siempre que las cuatro no sean iguales) y vereis que la serie siempre termina en el numero 6174, el numero misterioso :D

Si, lo se, es una tontada ... :p

dec 13-01-2007 23:09:10

Hola,

Cita:

Empezado por Seoane
Si, lo se, es una tontada ...

No, no; es un misterio. :D

Robert01 14-01-2007 14:36:51

Seoane, una pregunta:

¿en otros sistemas de numeración, hay números que tengan estas propiedades?

Por ejemplo en el sistema hexadecimal

Saludos

seoane 14-01-2007 15:34:15

Cita:

Empezado por Robert01
Seoane, una pregunta:

¿en otros sistemas de numeración, hay números que tengan estas propiedades?

Por ejemplo en el sistema hexadecimal

Saludos

:confused: Pues no lo se, podríamos preguntarle al señor Kaprekar, que al parecer le gustaba entretenerse buscando números como este :D


La franja horaria es GMT +2. Ahora son las 18:31:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi