Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

Archivo del blog

lunes, 18 de junio de 2012

Permutaciones: Con repetición / Importa orden. (forma recursiva)

Codigo:

//* Permutaciones (Forma recursiva)
//- Importa posición
//- Con repetición

package permutacion1;

public class Permutacion1 {

    public static void main(String[] args) {
        String[] elementos = "a,b,c,d,e".split(",");
        int n = 4;                  //Tipos para escoger
        int r = elementos.length;   //Elementos elegidos

        Perm1(elementos, "", n, r);

    }

    private static void Perm1(String[] elem, String act, int n, int r) {
        if (n == 0) {
            System.out.println(act);
        } else {
            for (int i = 0; i < r; i++) {
                Perm1(elem, act + elem[i] + ", ", n - 1, r);
            }
        }
    }
}

Resultado:

run:
a, a, a, a,
a, a, a, b,
a, a, a, c,
...
...
...
e, e, e, c,
e, e, e, d,
e, e, e, e,
BUILD SUCCESSFUL (total time: 0 seconds)


5 comentarios:

  1. Excelente, muchas gracias me sirvio de mucho (Y)

    ResponderEliminar
  2. una pregunta, como pasaría las permutaciones me las imprima en un archivo

    ResponderEliminar
  3. Estoy intentando hacer lo mismo, pero usando un ArrayList en vez del String act, y no lo consigo, porque la lista mantiene todos los valores en todas las iteraciones. ¿Alguna idea?
    public void recur(List valores, List listap, int longitud){

    if (longitud==0){
    System.out.println(listap);
    }else{
    for (int i = 0; i < valores.size(); i++) {

    System.out.println(" i: "+i +" valor: "+valores.get(i)+"longitud: "+longitud);

    listap.add(valores.get(i));
    recur(valores, listap, longitud-1);
    }
    }
    }

    ResponderEliminar
    Respuestas
    1. Por si te sirve de algo. Lo consegui:

      Tienes que borrar el ultimo elemento insertado:

      private static void Perm1(List elem, Listact, int n) {
      if (n == 0) {
      for (int i=0; i< elem.size();i++){
      System.out.print(elem.get(i));
      }
      System.out.println("");
      } else {
      for (int i = 0; i < elem.size(); i++) {
      act.add(elem.get(i));
      Perm1(elem, act, n - 1);
      int lastIndex=act.size()-1;
      act.remove(lastIndex);
      }
      }
      }

      Eliminar

Con la tecnología de Blogger.