Code:
function find_sum(nums array[1..6] of int;
used array[1..6] of bool;
cilj,sum,level int;
var formula string):string;
var
k,sum:int;
finish:bool;
begin
for k:=1 to 6 do
begin
if not(used[k]) then
begin
used[k]:=true;
for operation:=1 to 4 do
begin
case operation of
1:begin
sum:=sum+nums[k];
formula:='('+formula+'+'+nums[k]+')';
end;
2:begin
sum:=sum-nums[k];
formula:='('+formula+'-'+nums[k]+')';
end;
3:begin
sum:=sum*nums[k];
formula:='('+formula+'*'+nums[k]+')';
end;
4:begin
sum:=sum/nums[k];
formula:='('+formula+'/'+nums[k]+')';
end;
end;
inc(level);
if(level<6)
formula:=find_sum(nums,used,cilj,sum,level,formula)
else if (sum=cilj)
writeln(formula);
end; //operation end
end; //if not used end
end;//for end
end;
//glavni program
// inicijalizacija array-a iskoriscenosti
for m:=1 to 6 do
used[m]:=false;
// glavni loop
for m:=1 to 6 do
begin
level:=1;
sum:=nums[m];
used[m]:=true;
test:=find_sum(nums,used,cilj,sum,level,formula);
end;
Kao sto si vec video, moras prvo sam podeliti niz na promenljivu zvanu cilj, i ostatak niza sa 6 clanova.
Ideja je da u glavnom loop-u, startujes funkciju po jednom za svakog clana niza, i onda funkcija rekurzivno da preleti preko celog niza i pokusa sve moguce kombinacije. Malo je apsurdno resenje da jednostavno isprinta formulu usred rekurzije, ali to mozes modifikovati da povratni parametar iz funkcije bude prava formula. Uglavnom ovo bi trebalo uz malo modifikacije da radi. (jedino mozda nisam napisao pravu pascal deklaraciju fukcije)
People who think they know everything tend to irritate those of us who do.