Bueno, ya tengo la primera parte, que es generar todas las combinaciones. En total salen 40.000, claro que, como contaba con la posibilidad de no necesitar todos los números, añado a la lista de números el cero, por lo que sale alguna que otra posibilidad absurda, como dividir entre cero (más de una vez). El hecho de que salga el cero una suma o una resta indica que (si al final el resultado de la operación es el buscado) no se ha utilizado todos los números para hacer el cálculo.
Colocad 4 edits (donde se pondrán los números), un botón, un memo llamado combinaciones (donde aparecen las combinaciones) y un label (que indicará cuántas combinaciones salen),y colorcar este código en el evento onClick del botón.
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
const
opera = '+-*/';
var
o1,o2,o3, n1,n2,n3,n4: integer; num: array[1..5]of integer;
comb: string;
begin
combinaciones.clear;
combinaciones.Lines.BeginUpdate;
num[1]:=StrToInt(Edit1.text);
num[2]:=StrToInt(Edit2.text);
num[3]:=StrToInt(Edit3.text);
num[4]:=StrToInt(Edit4.text);
num[5]:=0; for o1:=1 to 4 do
for o2:=1 to 4 do
for o3:=1 to 4 do
for n1:=1 to 5 do
for n2:=1 to 5 do
for n3:=1 to 5 do
for n4:=1 to 5 do
begin
comb:=IntToStr(num[n1])+opera[o1]+
IntToStr(num[n2])+opera[o2]+
IntToStr(num[n3])+opera[o3]+IntToStr(num[n4]);
combinaciones.Lines.Add(comb);
end;
combinaciones.Lines.EndUpdate;
label1.caption:='Combinaciones: '+IntToStr(combinaciones.lines.count);
end;
Ahora ya sólo falta el método que haga esas 40.000 operaciones y que compare el resultado....