Ajuda com combinacoes(solucoes de uma equacao)

2 respostas
S

eu tenho uma equacao aqui, do tipo
x(1) + x(2) + x(3) + … + x(n) = m
onde (1), (2), (n) sao soh para diferenciar as variaveis, x(i) >=0 e m>0
como eu faço pra gerar todas as solucoes dessa equacao ?
eu axo que deve ser por combinacao, mas nao sei como… :frowning:

2 Respostas

T

Bom, se as variáveis puderem assumir apenas valores inteiros então você precisa pensar um pouquinho. É isso mesmo (apenas valores inteiros e positivos?)

S

ta ai o q eu ja fiz, fiz para r [de x(r)], valendo até 3, ou seja, até 3 variaveis eu consigo achar todas as solucoes possiveis
o problema eh fazer isso para r = n, ou seja, para qualquer valor de r...

as variaveis podem assumir 0, 1, 2, 3... até m[que é o resultado da equacao]

int r;
        int m;
        do{
            r = Integer.parseInt(JOptionPane.showInputDialog("Entre com o número de variáveis (r) da equação(deve ser maior que 0): "));
        } while(r<=0);
        do{
            m = Integer.parseInt(JOptionPane.showInputDialog("Digite o resultado (m) da equação(deve ser maior que 0): "));
        } while(m<=0);
        
        int variavel[] = new int[r];        
       
        int nSolucoes = 0;
        String solucao = "";
            if(r==1)
                JOptionPane.showMessageDialog(null, "A única solução possível para m = "+m+" e r = "+r+" é x = "+m+".");
            else if(r==2){                    
                for(variavel[0] = 0; variavel[0]<=m ; variavel[0]++){
                    variavel[1] = m-variavel[0];
                    solucao += variavel[0]+"  -  "+variavel[1]+".\n";
                    nSolucoes++;                    
                }
            }
            else if(r==3){
                for(variavel[0] = 0; variavel[0]<=m ; variavel[0]++){
                    for(variavel[1] = 0; variavel[1]<=(m-variavel[0]) ; variavel[1]++){
                        variavel[2] = m - variavel[0] - variavel[1];
                        solucao += variavel[0]+"  -  "+variavel[1]+"  -  "+variavel[2]+".\n";
                        nSolucoes++;                        
                    }
                }
            }
        if(r==1)
            System.exit(0);
        else
            JOptionPane.showMessageDialog(null, "O número de soluções possíveis é: "+(nSolucoes));
        JOptionPane.showMessageDialog(null, solucao);
Criado 27 de julho de 2008
Ultima resposta 28 de jul. de 2008
Respostas 2
Participantes 2