none
Melhor combinação entre números RRS feed

  • Pergunta

  • Olá pessoal!

    Seguinte, preciso de uma luz. Preciso desenvolver um programa em C# com um campo txtbox que receberá  N valores, e o algorítimo deve encontrar a melhor combinação dos valores que somando chegue o mais próximo de um outro valor que será informado. Por exemplo

    Valores de entrada = (5, 10, 15, 35, 40)

    Valor que eu quero = 31

    Melhor combinação = (5 + 10 + 15 = 30) 

    Se por acaso o valor fosse 36, não existiria melhor combinação a não ser o próprio valor 35 que chega mais próximo.

    Tanto ele deve analisar os números quanto forem necessários para chegar mais próximo ao valor requerido podendo retornar apenas 1 número ou a soma de todos eles. 

    Imagino que devo usar listas, com um argumento literal pra demonstrar os valores singulares e outro campo de valor numérico já somados. Depois dar um jeito de fazer todas as combinações possíveis, ordenar a lista em ordem crescente e mostrar qual o primeiro resultado que seja igual ou menor que o valor informado. Mas alguém me da uma ajuda como fazer isso? Obrigado.

    quarta-feira, 12 de novembro de 2014 14:19

Respostas

  • leopoldex, segue algumas dicas:

                //Armazena a entrada do usuário
                String entrada = "5, 10, 15, 35, 40, 12";
    
                //Obter a literal, remove os espaços, quebra por "," e converte para inteiro
                List<int> numerosInformados = entrada.Replace(" ", String.Empty).Split(',').Select(texto => Convert.ToInt32(texto)).ToList();
    
                //Ordena a lista em ordem crescente
                numerosInformados.Sort();
    
                //Depois de ordenado o primeiro é o menor
                int menorNumero = numerosInformados.First();
    
                //Depois de ordenado o último é o maior
                int maiorNumero = numerosInformados.First();
    
                //Sem ordenar poderia usar o método de extensão Min() para obter o menor número
                menorNumero = numerosInformados.Min();
    
                //Sem ordenar poderia usar o método de extensão Max() para obter o maior número
                maiorNumero = numerosInformados.Max();

    A lógica é por sua conta. Bom algoritmo para você!

    OBS: Lembre-se de adicionar:

    using System.Linq;


    quarta-feira, 12 de novembro de 2014 16:24