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

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:

[code]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++;
    }      
}

}[/code]

[quote=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:

[code]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++;
    }      
}

}[/code][/quote]

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!