Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 027 Loto : Februarie 25, 2009, 16:19:27
Cod:
....
for k:=1 to n do read(f,l[k]); {introduc in vectorul L numerele date de Loteria Nationala}
for k:=1 to 6 do x[k]:=l[1];{introduc in vectorul x pe toate pozitiile primul numar dat de loteria nationala}
k:=0;
j:=6;
p:=x[k]*6; {echivalent cu for k:=1 to 6 do p:=p+x[k],dar toate elementele din vector sunt egale}

{aici e un fel de backtracking}
while (p<>s) and (j>0) do begin {cat timp p > s sau < s si avem element precedent in vectorul x DO; valoarea lui j indica pozitia in vectorul x pe care sunt facute urmatoarele modificari:}
p:=0;
inc(k);
x[j]:=l[k];
for i:=1 to 6 do p:=p+x[i];{verificam pe pozitia j din vectorul x toate numerele date de loteria nationala pana cand p=s (avem deja numerele castigatoare) sau k=n (am verificat toate numerele date de loteria nationala). p este suma numerelor alese pentru biletul lui Gigel}
if k=n then begin k:=1;j:=j-1;end; {cand am terminat verificarea tuturor numerelor date de loteria nationala pe pozitia j din vectorul x coboram un nivel in vector si atribui la k valoarea 1 intrucat zero nu are sens, x[j] are deja valoarea l[k+1] data la inceput; (k+1 intrucat avem inc(k) inaintea egalarii)}
end; {Daca nu se poate obtine un bilet castigator structura repetitiva se va opri cand j=0 altfel, se va opri cand p=s}
if p<>s then write(g,-1) else write(g,x[1],' ',x[2],' ',x[3],' ',x[4],' ',x[5],' ',x[6]); {aici nu mai e cazul sa explic}
....
sper ca se intelege acum ce am facut, nu ma pricep prea bine sa exprim in cuvinte modul in care gandesc
[editat de moderator] foloseste tagul code cand vrei sa postezi cod sursa.
2  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 027 Loto : Februarie 25, 2009, 03:33:42
rezolvarea mea este urmatoarea:
Cod:
var
s,p:longint;
k,j,i,n:integer;
x,l:array[1..100] of integer;
f,g:text;
begin
assign(f,'loto.in');reset(f);
assign(g,'loto.out');rewrite(g);
read(f,n,s);   readln(f);
for k:=1 to n do read(f,l[k]);
for k:=1 to 6 do x[k]:=l[1];
k:=0;
j:=6;
p:=x[k]*6;
while (p<>s) and (j>0) do begin
p:=0;
inc(k);
x[j]:=l[k];
   for i:=1 to 6 do p:=p+x[i];
if k=n then begin k:=1;j:=j-1;end;
end;
if p<>s then write(g,-1) else write(g,x[1],' ',x[2],' ',x[3],' ',x[4],' ',x[5],' ',x[6]);
close(f);
close(g);
end.
imi poate spune si mie cineva de ce primesc zero puncte pe ea? Thumb down

[edit] Foloseste tag-ul "code" cand postezi cod.
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines