1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

arranjos java

Discussão em 'Programação' iniciada por Beware, 7 de Março de 2009. (Respostas: 9; Visualizações: 2685)

  1. Beware

    Beware What is folding?

    Boas pessoal, mais uma vez venho aqui para vos solicitar um pouco do vosso conecimento!!!

    Tenho um problema onde pretendem que eu implemente uma função em que, dado um certo número de digitos decimais (isto é, de 0 a 9), este me escreva todas os arranjos (com repetição) possiveis.

    Supostamente, para facilitar, terei de recorrer á recursividade, porém, não consigo nem por nada pô-lo a funcionar.

    Supostamente o procedimento é:

    Dado o número de dígitos "n", criar um array constante com "n" dígitos, isto é, se forem 5 digitos cria-se um array com os dígitos 0, 1, 2, 3 e 4. Seguidamente noutro array, pega-se no array anterior e faz-se todos os arranjos completos possiveis e será aqui que se recorre á recursividade (para preencher este último array), mas como?

    Alguém tem umas dicas?

    Abraço
     
  2. Beware

    Beware What is folding?

    Pessoal, ninguém consegue dar uma força??

    Eu só preciso mesmo de uma ajuda adicional, porque nao estou a ver mesmo por onde começar...

    Se não perceberem o problema digam alguma coisa !!!

    Abraço
     
  3. arpinacio

    arpinacio Power Member

    Antes que tudo, qual a fórmula dos arranjos??
     
  4. Beware

    Beware What is folding?

    A fórmula dos arranjos, se forem n elementos, ordenados k a k, ento será:

    A = (n)^k

    Obrigado desde já!
    Abraço
     
  5. arpinacio

    arpinacio Power Member

    Ou seja estamos a falar de uma potência normalíssima correcto??

    Ou seja para por exemplo um número 4 irás ter

    4^0, 4^1, 4^2, 4^3

    Sendo essa a solução?
     
  6. Beware

    Beware What is folding?

    Não percebi bem o que queres dizer, mas o meu problema nao é achar a solução em número inteiro, mas sim em gerar os arranjos com repetição... Por exemplo, para o conjunto {0,1,2}, para gerar arranjos ordenados 2 a 2, então fica:

    3^2 = 9;

    {0,0}
    {0,1}
    {0,2}

    {1,0}
    {1,1}
    {1,2}

    {2,0}
    {2,1}
    {2,2}

    Isto, porque é possivel haver repetições!!! Já consegui resolver um problema igualzinho, mas com permutações, mas para este, não estou a conseguir mesmo nada...

    Espero ter sido claro.
    Abraço
     
  7. arpinacio

    arpinacio Power Member

    Agora fiquei à toa, mas acho que ja entendi o que é para fazer.

    Já te digo algo.
     
  8. arpinacio

    arpinacio Power Member

    Boas!

    Bem demorou mas cá vai.

    eu penso que a ideia é teres algo assim

    funcao(n, k, array)

    que se vai chamar k vezes.

    ora, na primeira interação irás ter

    funcao(3,2,List<List<int>> LISTA) -> a lista é vazia e terá tamanho 3

    precorres o tal array (0,1,2)

    e para cada posição deste crias uma nova lista dentro da LISTA pegando no que já lá estava (agora nada!) e acrescentando i

    i = 0 ------> [[0]]
    i = 1 ------> [[0][1]]
    i = 2 ------> [[0][1][2]] -> NOVALISTA

    e por fim chamarás funcao(3,2-1,NOVALISTA)

    i = 0 ------> [[00]]
    [[00][01]]
    [[00][01][02]]
    i = 1 ------> [[00][01][02][10]]
    [[00][01][02][10][11]]
    [[00][01][02][10][11][12]]
    i = 2 ------> [[00][01][02][10][11][12][20]]
    [[00][01][02][10][11][12][20][21]]
    [[00][01][02][10][11][12][20][21][22]] ---> NOVALISTA



    ou seja, irás ter três fors.

    um para precorrer a lista(geral) que recebes, outro para precorreres o array. para cada posição do array, crias uma lista(valor) com o que está no array e o resto do que estava na lista(valor) antiga (o 3o for)

    este exercicio é terrivel para se fazer em java =\ não sei se existe o concat de listas, se existir nao necessitas do ultimo for, basta criares uma lista(por exemplo [0]) e fazeres concat com o resto que estava ([0] concat [0] = [00]
     
  9. Beware

    Beware What is folding?

    Bom, eu consegui agora concluir o meu programa... Fui a umas OT´s e com jeitinho, consegui o meu programa.... Para não deixar a thread em "branco" e por respeito ás pessoas que se disponibilizaram a ajudar, neste caso arpinacio, a quem eu realmente agradeço, resolvi deixar aqui a minha solução (com uma grande ajuda do professor)!;)

    Código:
      static void arranjosComRepeticao(final String[] alfabeto,String[] lista, 
        int n,int k) 
      { 
        if (k == 0) 
          escreve(lista); 
        else 
        { 
          for(int i = 0 ; i < n ; i++) 
          { 
            lista
    [lista.length - k] = alfabeto[i]; 
            arranjosComRepeticao(alfabeto,lista,n,k-1); 
          } 
        } 
      } 
     
      static void escreve(String[] lista) 
      { 
        for(int i = 0;i < lista.length;i++) 
        { 
          if (i > 0) 
            out.print(" "); 
          out.print(lista[i]); 
        } 
        if (lista.length > 0) 
          out.println(); 
      } 
    }
    Em principio, estas duas funções são suficientes... Pelo menos aqui foi. :p
    Obrigado mais uma vez.
    Abraço
     
  10. OxyGen #

    OxyGen # What is folding?

    Boas... está aqui o programa feitinho... ja agora tenho tambem para fazer as permutações... ou seja sao arranjos sem repetições.... basta por isso implementar uma funçao em que retires os casos em que existem numeros repetidos... se quiseres isso avisa...

    Já agora este programa esta desenhado para correr atraves da consola de linux(neste caso unbuntu)...

    caso tenhas o linux colocas este programa na tua pasta pessoal ( para evitar complicaçoes) e depois abres o Terminal/consola e escreves:

    javac a4e1.java
    java a4e1 n ---> em que n é o numero de arranjos... ou seja se o n for 2 escreve 00 01 02 03... 10 11 12 13... ate 99...

    Alguma duvida pergunta

    Código:
    import static java.lang.System.*;
    
    public class a4e1
    {
        public static void main(String[] args)
        {
            String dic;
            int k;
            dic = "0123456789";
    
            k = Integer.parseInt(args[0]);
    
            arranjos(dic, k, "");
        }
    
        static void arranjos(String dic, int k, String arranjo)
        {
    
            if (k==0)
                out.println(arranjo);
            else
                for (int i=0; i< dic.length(); i++)
                {
    
                        arranjos(dic,k-1, arranjo + dic.charAt(i) );
                }
    
        }
    }
                                                    
     
    Última edição: 17 de Março de 2009

Partilhar esta Página