Como obtener el número 655 a partir de operaciones matemáticas básicas con estos otros seis números: 45 19 66 44 23 55

No es necesario utilizar todos los números, pero no se pueden repetir

2 Respuestas

Respuesta
1

La suma de los 6 números da 252, por lo tanto seguro habrá que aplicar alguna multiplicación. Algunas consideraciones:

Entre los 6 números no hay ningún número que divida a otro, por lo tanto lo que se me ocurre es que haya que multiplicar 2 de estos números y al resultado sumarle o restarle otros, para intentar llegar al resultado.

Dejo una matriz con las multiplicaciones entre estos números (no está la diagonal porque no se permiten repetidos)

Veamos la diferencia contra el 655 de cada multiplicación

Vemos que la matriz es simétrica contra la diagonal (obviamente), por lo que podemos quedarnos solo con una parte de la matriz para analizar

Llegamos a este resultado

Donde las celdas amarillas son las usadas en la multiplicación y el valor en medio es lo que falta para llegar a 655 (y no se pueden usar las celdas amarillas.

Ahora hay que analizar un poco...

Primer caso 200: tenemos que formar este número con el 66, 44, 23 y 55. Pero vemos que sumando estos valores no llegamos y si los multiplicamos nos pasamos por mucho

Segundo caso 2315: con los números 19, 44, 23 y 55. Obviamente con suma solo no va a alcanzar, pero multiplicando 44*55 = 2420, ahora quedaría 105, pero con los número 19 y 23 no se puede conseguir este valor

...

La verdad son demasiados casos y no se me ocurre nada para simplificar la situación más allá de lo que ya puse, creo que la única forma de conseguir esto es hacer un algoritmo que vaya evaluando todas las posibilidades, ya que son muchos casos para hacerlos 'a mano'.

Te dejo lo que hice hasta acá, por si te sirve a ti o a alguien más para que avance a partir de esto

Salu2

Respuesta
1

·

·

¡Hola Carlos!

Por operaciones elementales entiendo suma, resta y multiplicación. La división es harto complicada y la mayoría de las veces no da resultado exacto, te tendrían que decir si se pueden usar resultados enteros inexactos o no.

Pues he hecho el programa que contempla todas las operaciones suma, resta y multiplicación de los seis números y no sale ninguna. Este es el programa

program Project1;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };
const
  nums: array[0..6] of int64 = (0,45,19,66,44,23,55);
var i,j,k,l,m,n:integer;
  ij, jk, kl, lm, mn:integer;
  sij, sjk, skl, slm, smn: string;
  mayor,resul:int64;
begin
  mayor:=-99999999;
  for i:=1 to 6 do
      for j:=1 to 6 do
        if j<>i then
          for k:=1 to 6 do
            if (k<>j) and (k<>i) then
              for l:=1 to 6 do
                if (l<>k) and (l<>j) and (l<>i) then
                  for m:=1 to 6 do
                    if (m<>l) and(m<>k) and (m<>j) and (m<>i) then
                      for n:=1 to 6 do
                        if (n<>m) and (n<>l) and(n<>k) and (n<>j) and (n<>i) then
                           for ij:=1 to 3 do
                             for jk:=1 to 3 do
                               for kl:=1 to 3 do
                                 for lm:=1 to 3 do
                                   for mn:=1 to 3 do
                                     begin
                                       resul:=nums[i];
                                       if ij=1 then resul := resul+nums[j] else if ij=2 then resul:= resul-nums[j] else resul:=resul*nums[j];
                                       if jk=1 then resul := resul+nums[k] else if jk=2 then resul:= resul-nums[k] else resul:=resul*nums[k];
                                       if kl=1 then resul := resul+nums[l] else if kl=2 then resul:= resul-nums[l] else resul:=resul*nums[l];
                                       if lm=1 then resul := resul+nums[m] else if lm=2 then resul:= resul-nums[m] else resul:=resul*nums[m];
                                       if mn=1 then resul := resul+nums[n] else if mn=2 then resul:= resul-nums[n] else resul:=resul*nums[n];
                                       //write(resul:8);
                                       if resul>mayor then mayor:=resul;
                                       if resul=655 then
                                          begin
                                            if ij=1 then sij := ' + ' else if ij=2 then sij:= ' - ' else sij:=' x ';
                                            if jk=1 then sjk := ' + ' else if jk=2 then sjk:= ' - ' else sjk:=' x ';
                                            if kl=1 then skl := ' + ' else if kl=2 then skl:= ' - ' else skl:=' x ';
                                            if lm=1 then slm := ' + ' else if lm=2 then slm:= ' - ' else slm:=' x ';
                                            if mn=1 then smn := ' + ' else if mn=2 then smn:= ' - ' else smn:=' x ';
                                            writeln('((((',nums[i],sij,nums[j],')',sjk,nums[k],' ) ',skl,nums[l],')',slm,nums[m],')',smn,nums[n]);
                                          end;
                                     end;
  writeln;
  writeln('Mayor: ',mayor);
  writeln('Fin');
  readln;
end.

Y el resultado ha sido este, un poco líoso de paréntesis pero eliminar los no necesarios era muy dificil de programar, así que ahora los quitaremos nosotros.

((((44 - 45) - 23 )  + 55) x 19) + 66
((((44 - 45) + 55 )  - 23) x 19) + 66
((((44 - 23) - 45 )  + 55) x 19) + 66
((((44 - 23) + 55 )  - 45) x 19) + 66
((((44 + 55) - 45 )  - 23) x 19) + 66
((((44 + 55) - 23 )  - 45) x 19) + 66
((((55 - 45) + 44 )  - 23) x 19) + 66
((((55 - 45) - 23 )  + 44) x 19) + 66
((((55 + 44) - 45 )  - 23) x 19) + 66
((((55 + 44) - 23 )  - 45) x 19) + 66
((((55 - 23) - 45 )  + 44) x 19) + 66
((((55 - 23) + 44 )  - 45) x 19) + 66
Mayor: 3140893800
Fin

·

Lo del mayor era una forma de comprobación de que las operaciones iban por buen camino, simplemente.

Vemos que los cuatro números primeros son siempre los mismos y con los mismos signos, luego solo son variaciones de la misma operación que es esta:

19 · (44 + 55 - 23 - 45) + 66 =

19 · 31 + 66 =

589 + 66 =

655

Y eso es todo, espero que te sirva y lo hayas entendido.

Sa lu dos.

·

·

Perdón, decía arriba "no sale ninguna" eso es falso, sale una, lo que pasa es que al principio no salía ninguna por que no había hecho bien el programa y había escrito un párrafo que luego borré pero se quedo eso sin quitar. Luego, he visto que se podían no utilizar todos los números pero ya lo tenía hecho con todos. Si en el programa ese se añade la posibilidad de usar el número 0 (poniendo los extremos de los bucles entre 0 y 6) y luego se quitan las respuestas donde se haya multiplicado por 0 se pueden obtener resultados para menos operadores, voy a ver.

Pues ya está probado y no sale ninguna respuesta mas que esa.

Sa lu dos.

:

:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas