Pagini recente » Cod sursa (job #577647) | Cod sursa (job #1332226) | Cod sursa (job #913342) | Cod sursa (job #555237) | Cod sursa (job #38720)
Cod sursa(job #38720)
program problema_damelor;
var as,ev:boolean;
n,k,i,limita:integer;
st,a:array[1..25] of integer;
f,g:text;
p,sp,x:real;
procedure init;
begin
st[k]:=0;
end;
procedure succesor;
begin
if st[k]<n then begin
st[k]:=st[k]+1;
as:=true;
end
else as:=false;
end;
procedure valid;
begin
ev:=true;
for i:=1 to k-1 do begin
if st[k]=st[i] then ev:=false;
if abs(k-i)=abs(st[k]-st[i]) then ev:=false;
end;
end;
function solutie(k:integer):boolean;
begin
if k=limita then solutie:=true
else solutie:=false;
end;
procedure tipar;
begin
for i:=1 to limita do p:=p*a[st[i]];
x:=x+1;
sp:=sp+p;
end;
begin
assign(f,'dezastru.in'); reset(f);
assign(g,'dezastru.out'); rewrite(g);
read(f,n,limita);
for i:=1 to n do read(f,a[i]);
k:=1;
init;
x:=0;
sp:=0;
while k>0 do begin
repeat
succesor;
if as then valid;
until (not as) or (as and ev);
if as then if solutie(k) then tipar
else begin
k:=k+1;
init;
end
else k:=k-1;
end;
close(g);
write(g,sp/x:k:6);
end.