e aj kas navalio;)..eo koda,nadam se da imaš Pascal,kompajliraj i piči!ak ne,mogu ja stavit i exe..
Code:
program Project2;
type niz=array[0..7]of integer;
var
kom:array[1..2]of niz;
f1,f2,f3,f4:textfile;
function omjer(p,np:integer;n:niz):boolean;
var
i,a,b:integer;
begin
a:=0; b:=0;
for i:=1 to 7 do if (n[i] mod 2) = 0 then inc(a) else inc(b);
if (a=p)and(b=np)then omjer:=true else omjer:=false;
end;
procedure prepisi;
var
i:integer;
s,s1:string;
begin
for i:=1 to 7 do begin str(kom[2,i],s1); s:=s+s1+' ';end;
if omjer(3,4,kom[2])then writeln(f1,s)
else if omjer(4,3,kom[2])then writeln(f2,s)
else if omjer(5,2,kom[2])then writeln(f3,s)
else if omjer(2,5,kom[2])then writeln(f4,s) ;
end;
procedure generiraj(n,k:integer);
var
j,t:integer;
begin
kom[1,0]:=-1;
for j:=1 to k do kom[1,j]:=j;
t:=1;
while t<>0 do
begin
for j:=0 to k do kom[2,j]:=kom[1,j];
t:=k;
while kom[2,t]=n-k+t do dec(t);
kom[2,t]:=kom[2,t]+1;
for j:=t+1 to k do kom[2,j]:=kom[2,j-1]+1;
prepisi;
kom[1]:=kom[2];
end;
end;
begin
assign(f1,'text1.txt');
assign(f2,'text2.txt');
assign(f3,'text3.txt');
assign(f4,'text4.txt');
rewrite(f1);
rewrite(f2);
rewrite(f3);
rewrite(f4);
generiraj(37,7);
close(f1);
close(f2);
close(f3);
close(f4);
readln;
end.
et,puno sreće tebi i tvom drugaru ;)..mada ne znam kak će ti ovo pomoć..
a što se tiče algoritma,za one koje zanima:
generiraju se kombinacije u leksikografskom poretku
dakle krenemo od prve kombinacije 1..k(kod nas je to od 1..7) i u svakom koraku radimo sljedeće:
krenemo od desna na ljevo u kombinaciji i tražimo prvi broj za kojeg nevrjedi n-k+p=kom[p],jer je maximalna vrijednost za broj na p-tom mjestu
n-k+p(npr za n=5,k=3 zadnja kombinacija sa max vrijednostima je 345,za p=2 max broj je 4)
kad ga nađemo,uvećamo ga za jedan,a brojevi koji su desno od njega su redom za jedan veći od prethodnika
ispišemo drugi red,i onda ga prekopiramo u prvi red matrice s kojom radimo
npr. n=6,k=4
poč.komb
1234
prvi broj od desna
4
uvećamo za 1
5
dalje nema brojeva,kombinacija
1235
...
2356
prvi broj
3
uvećamo
4
svi sljedeći brojevi desno
4+1=5,5+1=6
kombinacija
2456
inače,postoji mali bugić:prva kombinacija će biti ispisana zadnja,lako se da sredit,al to i nije tako bitno..to je iz razloga što koristimo matricu sa sam dva reda,umjesto sa nk(broj kombinacija)redova,što bi u ovom slučaju zauzelo puno memorije
ipak,smatram da pogađanjem kombinacija nebi daleko stigli..jer nama netreba jedna slučajna,već sve kombinacije..al valjalo bi probat
pozz