Combinações: 10 números de 6 em 6

05/12/2003

4

:shock:
Olá a todos,

Tenho 10 números e preciso agrupá-los de 6 em 6. Como faço para saber a todas as combinações possíveis? Para saber a quantidade de combinações eu conseguí, agora eu preciso saber e armazenar em uma tabela todas as combinações.

Quem pode me ajudar?

Obrigado
Anderoson
acbinfor@uai.com.br


Responder

Posts

05/12/2003

Spider

cara... num tô com o codigo na cabeça ainda naum mais achei interessante... o que melhor cairia seria uma função apenas, só que recursiva! ou 5 ou 6 FOR, um dentro do outro

vou ver e entro em contato


Responder

05/12/2003

Deus

Olha, tem uma página com um programa que faz exatamente o que você quer. :) Ou seja, permutações e combinações, só que ele faz de, por exemplo 10 números: 1 a 10. Acho que você não pode escolher os números, mas aí vc altera o código fonte para tal.

A página é: [url]http://www.delphiforfun.org/Programs/Permutes_2.htm[/url]

Espero que seja útil. ;) Abraços, dEUS.


Responder

05/12/2003

Spider

veja este codigo abaixo... criei uma stringlist para conter os 10 numeros que tenho, coloquei um stringgrid(name=grid1) para formar os numeros de 6 dígitos
coloquei uma progressbar(name=p) para ver o progresso
no final ele retorna uma mensagem com a quantidade de numeros gerados, levei em consideração que um numero naum se repete.
tipo:
112345 > naum é válido por ter dois numeros 1.

var st : TStringList;
a,b,c,d,e,f : integer;
begin
st:= TStringList.Create;
st.Clear;
st.Add(´0´);
st.Add(´1´);
st.Add(´2´);
st.Add(´3´);
st.Add(´4´);
st.Add(´5´);
st.Add(´6´);
st.Add(´7´);
st.Add(´8´);
st.Add(´9´);
p.Max:=10*9*8*7*6*5;
p.Position:=0;
grid1.RowCount:=2;
grid1.Rows[1].Clear;
for a:= 0 to 9 do
for b:= 0 to 9 do
begin
if b<>a then
for c:= 0 to 9 do
begin
if (c<>b) and (c<>a) then
for d:= 0 to 9 do
begin
if (d<>c) and (d<>b) and (d<>a) then
for e:= 0 to 9 do
begin
if (e<>d) and (e<>c) and (e<>b) and (e<>a) then
for f:= 0 to 9 do
begin
if (f<>e) and (f<>d) and (f<>c) and (f<>b) and (f<>a) then
begin
p.Position:=p.Position+1;
Application.ProcessMessages;
grid1.cells[0,grid1.RowCount-1]:=st.Strings[a]+st.Strings[b]+st.Strings[c]+st.Strings[d]+st.Strings[e]+st.Strings[f];
grid1.RowCount:=grid1.RowCount+1;
end;
end;
end;
end;
end;
end;
grid1.rowcount:=grid1.rowcount-1;
showmessage(inttostr(grid1.RowCount-1));
end;


Responder
Bom´o método q eu vou colocar aqui, é meio trabalhoso, + vai lá:

Suponha q sejam 10 letras com combinações de 6 em 6

para eu saber o total é :

10*9*8*7*6*5 /6*5*4*3*2*1

logo eu vou ter 210 combinações.

Sabe-se q todas as letras , estarão dispostas em números iguais, ou seja, eu terei (10,6) - (9,6) de A...
126 repetiçoes de A em 210 combinações...
logo a soma de B será 126
C tbm...,d,e,etc.....

Como eu dividi dessa maneira o q eu faço...

1º Jogo todos os ´A´ na 1ª Coluna , da linha 1 a 126...
2º Jogo (9,6) - (8,6) de B na 1ª Coluna..., ou seja, 56 ´B´ na 1ª Coluna...
3º Jogo (8,6) - (7,6) de C na 1ª Coluna..., ou seja, 21 ´C´ na 1ª Coluna...
4º Jogo (7,6) - (6,6) de D na 1ª Coluna...,ou seja, 6 ´D´ na 1ª Coluna...
5º Jogo (6,6) de E na 1ª Coluna...,ou seja 1 ´E´ na 1ª Coluna....

Pode ver q a soma de cada letra na 1ª coluna é igual as 210 combinações possíveis....

A Partir daí , é só destrinchar as próximas colunas.....
Sabendo q para A da 1 ª coluna , eu tenho 70 B, + 35C +15D + 5E + 1 F
ou seja, os 126 ´A´ da 1ª Coluna é Preenchido com 70B seguido de 35C, 15D 5E e 1F na 2ª coluna...

Eu faço da seguinte maneira:

a := 0;
While a <126 do
a := a+1;
table1.Append;
begin
table1[´Coluna1´] :=´A´;
If a <=70 then
begin
table1[´Coluna2´] := ´B´;
end;
If (a >70) and (a <=105) then
begin
table1[´Coluna2´] := ´C´;
end;
If (a>105) and (a<=120) then
begin
table1[´Coluna2´] := ´D´;
end;
If (a >120) and (a<=125) then
begin
table1[´Coluna2´] := ´E´ ;
end;
If a = 126 then
begin
table1[´Coluna2´] := ´F´
end;
end;

E assim por diante, só coloquei begin-end na condição if por q dessa maneira voce deverá preencher as 6 colunas...
Aí tá descrito os 126 A da 1ª Coluna, e seu complemento na 2ª Coluna....

Obs:. se for para jogar na Mega Sena, a maquininha deles já faz essa combinação automática.....


Responder