Imprimir todas as combinações possíveis em grupos de 3!

1 resposta
D

Olá...

Estou com um problema na lógica e não consigo encontrar o erro.

O programa deve imprimir todas as combinações possíveis em grupos de 3 e não deve imprimir a mesma combinação mais de uma vez.

Por exemplo:
Temos: A B C D

Todas as combinações possíveis em grupos de 3 é:

A B C
A B D
A C D
B C D

Segue o código:

package teste;


public class Teste 
{

    static String[] deck = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
    
    public static void main(String[] args) 
    {
       int x=0;
       int y=0;
        for(int a=0; a<=9; a++)
        {
            for(int b=x; b<=9; b++)
            {
                for(int c=y; c<=9; c++)
                {
                    if(!deck[a].equals(deck[b]) && !deck[a].equals(deck[c]) && !deck[b].equals(deck[c]))
                    { 
                    System.out.println(deck[a] + " " + deck[b] + " " + deck[c]);
                    }
                }
                y++;
            }
            x++;
        }      
    }
}

1 Resposta

Luiz_Augusto_Prado
Destronoyzer:
Olá...

Estou com um problema na lógica e não consigo encontrar o erro.

O programa deve imprimir todas as combinações possíveis em grupos de 3 e não deve imprimir a mesma combinação mais de uma vez.

Por exemplo:
Temos: A B C D

Todas as combinações possíveis em grupos de 3 é:

A B C
A B D
A C D
B C D

Segue o código:

package teste;


public class Teste 
{

    static String[] deck = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
    
    public static void main(String[] args) 
    {
       int x=0;[b] // por que o x e o y no mesmo nivel de laço?[/b] eles vão crescer sem voltar ao zero?
       int y=0;
        for(int a=0; a<=9; a++)
        { 
            for(int b=x; b<=9; b++)
            { 
                for(int c=y; c<=9; c++)
                {
                    if(!deck[a].equals(deck[b]) && !deck[a].equals(deck[c]) && !deck[b].equals(deck[c]))
                    { 
                    System.out.println(deck[a] + " " + deck[b] + " " + deck[c]);
                    }
                }
                y++;
            }
            x++;
        }      
    }
}

Acho que vc precisa zerar o x e o y em algum momento. Vc esqueceu disso.

ve uma outra maneira de fazer, no caso javascript:

<script>
	var alfabeto = ["0", "1", "2", "3"];
	for(var c1=0; c1<alfabeto.length; c1++)
	{
		for(var c2=0; c2<alfabeto.length; c2++)
		{
			if(c2!=c1)
			{
				for(var c3=0; c3<alfabeto.length; c3++)
				{
					if(c3!=c1 && c3!=c2)
					{
						document.write("<br>");
						document.write(alfabeto[c1] + " " + alfabeto[c2]  + " " + alfabeto[c3] );
					}
				}
			}
		}
	}
</script>

Certamente devem existir outras formas melhores de se fazer.
Sucesso!

Criado 31 de outubro de 2014
Ultima resposta 4 de nov. de 2014
Respostas 1
Participantes 2