none
-Problema com código de um cadeado RRS feed

  • Discussão Geral


  • Prezados bom dia,

    Estou com um problema que é o seguinte:

    Dado um cadeado que possui 10 chaves seletoras com duas opções (A(letra A) ou B(letra B)), levando em consideração que a combinação para abrir o cadeado de exemplo é a sequência:

                                                                         A B A A B B A B A B

    Crie um algoritmo que imprima todas as sequencias possíveis para abertura de um cadeado e informe em qual posição o cadeado será aberto.

    Requisitos:

    • Utilizar a linguagem de programação C# .net (Visual Studio)
    • Podendo ser via WinForm ou Console

    Por favor alguém me ajude!


    -----------------------------------


    sábado, 1 de dezembro de 2018 01:32

Todas as Respostas

  • Psmsoarsjr,

       Eu acho que resolvi esse problema.

       E para isso, modifiquei o seguinte algoritmo:

    ===================================
    Algoritmo para obter combinações

    https://social.msdn.microsoft.com/Forums/pt-BR/3ba1adbb-0093-4ba4-b92e-cc23e75bb44c/algoritmo-para-obter-combinaes?forum=clientept
    ===================================

      Funciona assim, a função que faz a mágica acontecer é essa:

    private void GeraNovaPalavra(List<string> lista, string[] array, int tamanho, string palavraAtual)
    {
        string palavraCorrente = palavraAtual;
    
        for (int i = 0; i < array.Length; i++)
        {
            palavraCorrente += array[i];
    
            if (palavraCorrente.Length >= tamanho)
            {
                lista.Add(palavraCorrente);
                palavraCorrente = palavraAtual;
            }
            else
            {
                GeraNovaPalavra(lista, array, tamanho, palavraCorrente);
                palavraCorrente = palavraAtual;
            }
        }
    }

      Essa função trabalha com recursividade (ela chama ela mesma).

      Para testá-la, você pode criar um "form" dessa forma:

      - 6 Labels;
      - 2 TextBox;
      - 1 NumericUpDown;
      - 1 ListBox;
      - 1 Button;

      A tela fica assim:

      O Label vazio tem o nome de "lblSeraAbertoEm";
      Os TextBox se chamam: "txtSequenciaAberto" e "txtOpcoesLetras";
      O NumericUpDown tem o nome de: "nudChavesSeletoras";
      O ListBox se chama: "lstCadeado";
      O Button se chama: "btnCalcule";

      A chamada para função nesse formulário é o seguinte código (dentro do botão):

    private void btnCalcule_Click(object sender, EventArgs e)
    {
        List<string> lstStrLetras = new List<string>();
        string[] arrStrSequenciaAberto;
        string[] arrStrOpcoesLetras;
        string strSequenciaAberto = string.Empty;
        int intTamanhoSequenciaAberto;
    
        arrStrSequenciaAberto = txtSequenciaAberto.Text.Split();
        arrStrOpcoesLetras = txtOpcoesLetras.Text.Split();
    
        foreach (string str in arrStrSequenciaAberto)
            strSequenciaAberto = strSequenciaAberto + str;
    
        intTamanhoSequenciaAberto = (int)nudChavesSeletoras.Value;
    
        GeraNovaPalavra(lstStrLetras, arrStrOpcoesLetras, intTamanhoSequenciaAberto, string.Empty);
    
        lstCadeado.Items.Clear();
    
        foreach (string letra in lstStrLetras)
        {
            lstCadeado.Items.Add(string.Format("{0}", letra));
    
            if (letra == strSequenciaAberto)
            {
                lstCadeado.SetSelected(lstCadeado.Items.Count-1, true);
                lblSeraAbertoEm.Text = letra;
            }
        }
    }

       Testa o código e qualquer dúvida me chama...
       ... se você gostar, pode me fazer dois favores?

       1º) Me pontua aqui na MSDN;
       2º) Me pontua lá no StackOverFlow Brasil? Eu não tenho nenhum ponto lá... snif, snif... Mas você precisa editar sua pergunta, pois foi bloqueada lá... "marcada como pendente como fora de escopo por NoobSaibot, Maniero♦ 12 horas atrás"

    https://pt.stackoverflow.com/questions/347169/problema-com-c%C3%B3digo-de-um-cadeado

       Posso também te passar o código completo via "OneDrive"... se você me oferecer uma... MEDALHA, MEDALHA, MEDALHA!!! (Muttley)

    VALEW!
    []'s,
    Fabio.

    • Editado Fabio I sábado, 1 de dezembro de 2018 18:44
    sábado, 1 de dezembro de 2018 18:37