none
Como obter todas as combinações possíveis de uma Analise Combinatória RRS feed

  • Pergunta

  • Boa tarde, Pessoa.

    Preciso criar uma rotina que retorne todas as possibilidades do exemplo abaixo.

    Exemplo: De quantos modos diferentes posso separar 10 bolinhas de cores distintas, colocando 2 bolinhas em cada saquinhos

    • Total de bolinhas: n = 10
    • Quantidade de bolinhas por saquinho: p = 2

    Sabendo que C(10,2) = 45. Como gerar as 45 combinações ?

    Desde já agradeço pela ajuda.

    quarta-feira, 11 de abril de 2018 17:45

Respostas

  • 1- Crie uma lista que contem 10 Bolinhas:

    List<string> bolinhas = new List<string>(new string[] { "bolinha azul","bolinha verde","bolinha amarela","bolinha vermelha","bolinha laranja","bolinha preta","bolinha roxa","bolinha rosa","bolinha fuschia","bolinha grena" });


    2- crie um laço duplo e faca as combinaçoes. Adicione uma logica para evitar permutaçoes e combinaçoes da mesma cor.

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> bolinhas = new List<string>(new string[] { "bolinha azul", "bolinha verde", "bolinha amarela", "bolinha vermelha", "bolinha laranja", "bolinha preta", "bolinha roxa", "bolinha rosa", "bolinha fuschia", "bolinha grena" });
                List<Tuple<string, string>> saquinhos = new List<Tuple<string, string>>();
                for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        if (i != j)//evita criar um saco com duas bolas da mesma cor
                        {
                            if (!(saquinhos.Contains(new Tuple<string, string>(bolinhas[i], bolinhas[j])) || saquinhos.Contains(new Tuple<string, string>(bolinhas[j], bolinhas[i]))))//elimina as permutaçoes, tipo azul-verde, verde-azul
                            {
                                Tuple<string, string> saquinho = new Tuple<string, string>(bolinhas[i], bolinhas[j]);
                                saquinhos.Add(saquinho);
                            }
                        }
                    }
                }
                int k = 1;
                foreach (Tuple<string, string> saquinho in saquinhos)
                    Console.WriteLine((k++).ToString() + " : " + saquinho.Item1 + " - " + saquinho.Item2);
    
                Console.ReadKey();
            }
        }
    }


    Resultado:

    1 : bolinha azul - bolinha verde
    2 : bolinha azul - bolinha amarela
    3 : bolinha azul - bolinha vermelha
    4 : bolinha azul - bolinha laranja
    5 : bolinha azul - bolinha preta
    6 : bolinha azul - bolinha roxa
    7 : bolinha azul - bolinha rosa
    8 : bolinha azul - bolinha fuschia
    9 : bolinha azul - bolinha grena
    10 : bolinha verde - bolinha amarela
    11 : bolinha verde - bolinha vermelha
    12 : bolinha verde - bolinha laranja
    13 : bolinha verde - bolinha preta
    14 : bolinha verde - bolinha roxa
    15 : bolinha verde - bolinha rosa
    16 : bolinha verde - bolinha fuschia
    17 : bolinha verde - bolinha grena
    18 : bolinha amarela - bolinha vermelha
    19 : bolinha amarela - bolinha laranja
    20 : bolinha amarela - bolinha preta
    21 : bolinha amarela - bolinha roxa
    22 : bolinha amarela - bolinha rosa
    23 : bolinha amarela - bolinha fuschia
    24 : bolinha amarela - bolinha grena
    25 : bolinha vermelha - bolinha laranja
    26 : bolinha vermelha - bolinha preta
    27 : bolinha vermelha - bolinha roxa
    28 : bolinha vermelha - bolinha rosa
    29 : bolinha vermelha - bolinha fuschia
    30 : bolinha vermelha - bolinha grena
    31 : bolinha laranja - bolinha preta
    32 : bolinha laranja - bolinha roxa
    33 : bolinha laranja - bolinha rosa
    34 : bolinha laranja - bolinha fuschia
    35 : bolinha laranja - bolinha grena
    36 : bolinha preta - bolinha roxa
    37 : bolinha preta - bolinha rosa
    38 : bolinha preta - bolinha fuschia
    39 : bolinha preta - bolinha grena
    40 : bolinha roxa - bolinha rosa
    41 : bolinha roxa - bolinha fuschia
    42 : bolinha roxa - bolinha grena
    43 : bolinha rosa - bolinha fuschia
    44 : bolinha rosa - bolinha grena
    45 : bolinha fuschia - bolinha grena
    

    Nao se esqueça de repartir a nota com o pessoal do forum :)

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quarta-feira, 11 de abril de 2018 19:21
    Moderador

Todas as Respostas

  • 1- Crie uma lista que contem 10 Bolinhas:

    List<string> bolinhas = new List<string>(new string[] { "bolinha azul","bolinha verde","bolinha amarela","bolinha vermelha","bolinha laranja","bolinha preta","bolinha roxa","bolinha rosa","bolinha fuschia","bolinha grena" });


    2- crie um laço duplo e faca as combinaçoes. Adicione uma logica para evitar permutaçoes e combinaçoes da mesma cor.

    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> bolinhas = new List<string>(new string[] { "bolinha azul", "bolinha verde", "bolinha amarela", "bolinha vermelha", "bolinha laranja", "bolinha preta", "bolinha roxa", "bolinha rosa", "bolinha fuschia", "bolinha grena" });
                List<Tuple<string, string>> saquinhos = new List<Tuple<string, string>>();
                for (int i = 0; i < 10; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        if (i != j)//evita criar um saco com duas bolas da mesma cor
                        {
                            if (!(saquinhos.Contains(new Tuple<string, string>(bolinhas[i], bolinhas[j])) || saquinhos.Contains(new Tuple<string, string>(bolinhas[j], bolinhas[i]))))//elimina as permutaçoes, tipo azul-verde, verde-azul
                            {
                                Tuple<string, string> saquinho = new Tuple<string, string>(bolinhas[i], bolinhas[j]);
                                saquinhos.Add(saquinho);
                            }
                        }
                    }
                }
                int k = 1;
                foreach (Tuple<string, string> saquinho in saquinhos)
                    Console.WriteLine((k++).ToString() + " : " + saquinho.Item1 + " - " + saquinho.Item2);
    
                Console.ReadKey();
            }
        }
    }


    Resultado:

    1 : bolinha azul - bolinha verde
    2 : bolinha azul - bolinha amarela
    3 : bolinha azul - bolinha vermelha
    4 : bolinha azul - bolinha laranja
    5 : bolinha azul - bolinha preta
    6 : bolinha azul - bolinha roxa
    7 : bolinha azul - bolinha rosa
    8 : bolinha azul - bolinha fuschia
    9 : bolinha azul - bolinha grena
    10 : bolinha verde - bolinha amarela
    11 : bolinha verde - bolinha vermelha
    12 : bolinha verde - bolinha laranja
    13 : bolinha verde - bolinha preta
    14 : bolinha verde - bolinha roxa
    15 : bolinha verde - bolinha rosa
    16 : bolinha verde - bolinha fuschia
    17 : bolinha verde - bolinha grena
    18 : bolinha amarela - bolinha vermelha
    19 : bolinha amarela - bolinha laranja
    20 : bolinha amarela - bolinha preta
    21 : bolinha amarela - bolinha roxa
    22 : bolinha amarela - bolinha rosa
    23 : bolinha amarela - bolinha fuschia
    24 : bolinha amarela - bolinha grena
    25 : bolinha vermelha - bolinha laranja
    26 : bolinha vermelha - bolinha preta
    27 : bolinha vermelha - bolinha roxa
    28 : bolinha vermelha - bolinha rosa
    29 : bolinha vermelha - bolinha fuschia
    30 : bolinha vermelha - bolinha grena
    31 : bolinha laranja - bolinha preta
    32 : bolinha laranja - bolinha roxa
    33 : bolinha laranja - bolinha rosa
    34 : bolinha laranja - bolinha fuschia
    35 : bolinha laranja - bolinha grena
    36 : bolinha preta - bolinha roxa
    37 : bolinha preta - bolinha rosa
    38 : bolinha preta - bolinha fuschia
    39 : bolinha preta - bolinha grena
    40 : bolinha roxa - bolinha rosa
    41 : bolinha roxa - bolinha fuschia
    42 : bolinha roxa - bolinha grena
    43 : bolinha rosa - bolinha fuschia
    44 : bolinha rosa - bolinha grena
    45 : bolinha fuschia - bolinha grena
    

    Nao se esqueça de repartir a nota com o pessoal do forum :)

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quarta-feira, 11 de abril de 2018 19:21
    Moderador
  • Muito Obrigado pela resposta. Ajudou muito, mesmo!!!

    Uma ultima duvida: Turple da pra usar até 7 itens, certo? Se a logica for 50 bolinhas e 10 em cada saco, por exemplo? Como seria ?

    quarta-feira, 11 de abril de 2018 20:34
  • Neste caso seria uma lista de uma lista. E para verificar se existem permutaçoes bastaria usar um intersect.

    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 11 de abril de 2018 22:10
    Moderador
  • Fiz um teste aqui e tive que usar lista da lista mesmo.

    Obrigado pela força

    quarta-feira, 11 de abril de 2018 22:24