Ver Mensaje Individual
  #1  
Antiguo 13-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 26
seoane Va por buen camino
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 ........ ya puedo verlo, el resultado es: 6174

































Bien, después de la tontería, la explicación . 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

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

Si, lo se, es una tontada ...
Responder Con Cita