Lógica de Programação

Pessoal,

Estou precisnado fazer combinações entre alguns números do tipo:
conjunto de números : 1,2,3,4,5
teria que gerar todas as combinações em grupos de 3, até ai ótimo só fazer 3 “for” um dentro do outro e está resolvido, só que tenho dois problemas o conjunto de números e o números de dezenas no grupo podem variar.

exemplo:
conjunto: 1,2,3,4,5
grupos de 3 dezenas

conjunto: 3,4,5,7,14,15
grupos de 4 dezenas

alguém poderia me ajudar com uma lógica para resolver o problema.

cara dexa eu ver se eu entendi

vc tem os grupos

A e B por exemplo

ai vc tem números de 3 dezenas e quer fazer combinações entre eles só que tem número que tem mais dezenas que outros

Exemplo

A B
1 1
2 2
3 3
23

Combinação A = 123, 321, 212, 312
Combinação B = 123, 321, 212, 312, ???

Seria mais ou menos isso

abrass

:wink:

Assim ó:
eu tenho um universo de dezenas que vai de 1 a 10 por exemplo.
ai eu tenho que em determinado momento combinar essas dezenas em grupos de 3
exemplo: 1,2,3 - 1,2,4 - 1,2,5 - 1,2,6 - 1,2,7 … 3,4,5 … etc etc …

ai em outro determinado momento eu tenho que combinar essas dezenas em grupo de 5
exemplo: 1,2,3,4,5 - 1,2,3,4,6 - 1,2,3,4,7 … etc etc

entendeu?

Entendi sim cara

E a o que vai definir se vai ser em 3 ou em 5 vai ser uma condição que o usuário vai especificar?

exatamente, o usuário dirá como ele quer combinar isso

Só mais uma coisa você conseguiu fazer em 3 de boa né

flw

abras

:wink:

sim, quero combinar isso de forma dinamica

Posta o código ai pra ver se eu consigo te dar uma mão

flw

abrass

	public void gerar(){
		for(int a=1;a<8;a++){
			for(int b=2;b<9;b++){
				for(int c=3;c<10;c++){
					System.out.println(a+","+b+","+c);
				}
			}
		}
	}

[quote=caravelas] public void gerar(){ for(int a=1;a<8;a++){ for(int b=2;b<9;b++){ for(int c=3;c<10;c++){ System.out.println(a+","+b+","+c); } } } } [/quote]

Nesse caso você quis conjuntos de 3 elementos com os caracteres de 1 a 9? Se for, enxerguei um erro: o mesmo caractere não pode aparecer duas vezes no conjunto.

Tanto faz aparecer ou não, o meu problema não é combinar grupos fixos, pois para isso eu faço “for” como fiz, o problema e fazer uma combinação com grupos de qtdes diferentes como explicitado anteriormente…

Eu estou tentando fazer um método recursivo mas não estou obtendo exito.

E ai pessoal nada?

Vê o algoritmo que fiz neste topic. Só tens de adaptar para não fazer as combinações todas e para ao fim de n níveis.

pmlm gostei da sua solução, mas queria que a coisa fosse mais dinâmica queria chamar um método mais ou menos assim gerarCombinacoes(a,b,y) onde a seria o número inicial a ser gerado, b seria o número final e y a qtde de numeros do grupo
exemplo:

gerarCombinacoes(1,5,3) a saída seria:
1,2,3
1,2,4
1,2,5
1,3,4
1,3,5
1,4,5
2,3,4
2,3,5
etc, etc

E ai pessoal vamos tentar resolver essa

Mas o que queres aqui é diferente do que queres no posto inicial. De qualquer forma já tens ali a base do algoritmo, podes tentar alterar sem esperar que alguém faça tudo para ti.

pmlm longe de mim querer que alguém me entregue algo pronto, postei essa dúvida para que possamos discutir uma melhor forma de fazer isso, o que você postou ajuda sim, mas não acredito ser a melhor solução principalmente no quesito performance.

mas valeu por tentar ajudar e espero continuarmos a trocar idéia para resolver isso.

UP!

eu não sei se entendi direito mas veja se eh isso mesmo…

[code]int X = número de elementos no grupo, especificado pelo usuario
int Z = numero de grupos que vao ser gerados
int contador = 0

while ( contador < Z ) {

X = usuario escolhe um numero de elementos no grupo

  for ( int i = 0, i < X; i ++ ) {
 
          System.out.print( Math.random()*10 + "," );
  }

  System.out.println("");

contador++;
}[/code]

podia usar 2 for, mas assim da pra vc entender melhor a idéia =p
como vc nao diz em q momento ele escolhe o numero de elementos, eu calculei q era na geração de cada grupo mas dae vc q sabe… pode criar uma constante definindo o numero de vezes que serão sorteados cada vez que ele escolher um numero de elementos no grupo sei la ( nesse caso o X teria que sair do while )… vai do q vc quiser