Czy ktoś zna procedurę, która wyliczy wszystkie kombinacje w TotoLotka?
Procedure , którą sam napisałem, jest cholernie wolna. Potrzebuję czegoś szybkiego.
Na forum szukałem i nie znalazłem!
Czy ktoś zna procedurę, która wyliczy wszystkie kombinacje w TotoLotka?
Procedure , którą sam napisałem, jest cholernie wolna. Potrzebuję czegoś szybkiego.
Na forum szukałem i nie znalazłem!
Mnie sie wydaje że 48^7 czyli: 587068342272
Mnie sie wydaje że 48^7 czyli: 587068342272
Przesadziłeś :) To jest tylko:
49!/42!/7! = 49484746454443/7/6/5/4/3/2 - podstawy kombinatoryki :)
Ale chodzi mi o kombinacje np. 6 36 21 41 12 .
Program wyznaczający wszystkie kombinacje działa w czasie n! czyli 49! - daruj sobie.
nie wiem czy cie dobrzez zrouzmialem ale moze to?:
var
x:integer;
begin
x:=random(47);
if x=0 then label1.caption:='1';
//itp.
o to chodzi?
Przesadziłeś :) To jest tylko:
49!/42!/7! = 49484746454443/7/6/5/4/3/2 - podstawy kombinatoryki :)
Mała pomyłka. 49 piłeczek. Losujemy 6.
Czyli:
49!/(6!43!)=303996 (jakoś strasznie mało [stuk] )
A co do kodu, to najszybsze co mi się udało zrobić to:
procedure TForm1.Button1Click(Sender: TObject);
procedure Toto(Wylosowane: TZbior; LiczbaEl, k: Byte);
var
i: Byte;
Ciag: string;
begin
if LiczbaEl >= 6 then
begin
Ciag := '';
for i := 1 to 49 do
if i in Wylosowane then
Ciag := Ciag + ' ' + IntToStr(i);
ListBox1.Items.Add(Ciag);
end
else
begin
for i := k to 49 do
if not (i in Wylosowane) then
Toto(Wylosowane+[i], LiczbaEl+1, i);
end;
end;
begin
Toto([], 0, 1);
end;
Przynajmniej nigdy się nie powtarzają. Ale i tak troszkę za długo.
Mała pomyłka. 49 piłeczek. Losujemy 6.
Myślałem, że 7...
Dzięki, ale rzeczywiście nie jest to za szybka procedura.
na tej stronie jest taki program ktory robi plik txt ze wszystkimi kombinacjami. Sciągnij go i przejzyj kod zrodlowy :-)
Czy ktoś ma jakiś szybszy algorytm na generowanie kombinacji.
Przeciez losowanie w totolotku to kombinacja 6 z 49 czyli 49!/6!*(49-6)!
i wychodzi cos ponad 13 milionow!
Hmm - jeżeli to ma być bez powtórzeń, to takie coś powinno być ok:
for i:=1 to 49 do
for j:=i+1 to 49 do
for k:=j+1 to 49 do
for l:=k+1 to 49 do
for m:=l+1 to 49 do
for n:=m+1 to 49 do
writeln(tekstowy,i:3,j:3,k:3,l:3,m:3,n:3);
Choć w zasadzie, to sam już nie [???] wiem - jak ktoś chce, to niech to obada - ja już zmęczony jestem [stuk]
// uruchom to i powiedz, jak długo liczył się 1% - ŁF
Wydaje mi sie ze mam cos co ci pomoze. Napisalem se taka procke co ci policzy takie kombinacje bez powtorzen jakie tylko chcesz. Zeby ci to dzialalo - musisz miec na formie listboxa ale przy generowaniu kombinacji 6 z 49 raczej bedziesz musial dokonac niewielkich zmian zeby zapisywalo ci do pliku... Sorry za nieczytelny kod :D zeby obliczyc np. kombinacje duzego lotka musisz wywolac ta procke tak: komb(49,6)
Oto i ona:
procedure TForm1.komb(ileliczb,naile:byte);
var tab:array[1..10]of integer;
n:integer;
s:string;
begin
n:=0;
repeat
inc(n);
tab[n]:=n;
until n=naile;
dec(tab[n]);
repeat
n:=naile+1;
repeat
dec(n);
if n=naile then
if tab[n]<ileliczb then break;
if n<naile then
if tab[n]<tab[n+1]-1 then break;
until 2=3;
inc(tab[n]);
if n<naile then
repeat
inc(n);
tab[n]:=tab[n-1]+1;
until n=naile;
s:='';
n:=0;
repeat
inc(n);
s:=s+inttostr(tab[n]);
if n<naile then s:=s+', ';
until n=naile;
listbox1.Items.Add(s);
until tab[1]=ileliczb-naile+1;
end;
a daloby sie dopisac kluczyk ktory umozliwialby wpisywanie do 10 liczb (optymalnie 8 lub 6) i porownywac je z otrzymanymi ?
DryoBates napisał(a)
... 49!/(6!43!)=303996 (jakoś strasznie mało)
No całe szczęście, że nie brakło Ci intuicji, bo za takie rachunki to trzeba by udzielić nagany! :-)
Liczymy to tak: (kulawy ten tex)
a_s_f napisał(a)
... i wychodzi cos ponad 13 milionow!
Smiglo napisał(a)
for i:=1 to 49 do
for j:=i+1 to 49...
w zasadzie nie da się szybciej, alefor i:=1 to 49-5 do
for j:=i+1 to 49-4 do
for k:=j+1 to 49-3 do ...
będzie odrobinę lżejsze.
> ##### ketrish napisał(a)
> a daloby sie dopisac kluczyk ktory umozliwialby wpisywanie do 10 liczb (optymalnie 8 lub 6) i porownywac je z otrzymanymi ?
Eeee? a w celu?
powiedzmy ze kiedys w gimnazjum nudzilo mi sie wiec zaczelem mieszac liczby z dat i co drugie (ok) losowanie trojeczka byla :P - kiedys nawet czworeczka sie trafila :P nie wiem jak jest atm czy zmienili "kod" czy tez ten sam stosuja :P