·
·
¡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.
·
·