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. Y como sería en c++?

    ResponderEliminar
  4. 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.