Código (permutar4.java):
package permutar4;
import java.util.Arrays;
public class Permutar4 {
public static void main(String[] args) {
int indice = 90;
int nElementos = 5;
Permutation p1 = new Permutation(nElementos, indice);
System.out.println("Elementos:\n" + nElementos);
System.out.println("Decimal:\n" + indice);
System.out.println("Factorádico:");
System.out.println(Arrays.toString(p1.getFactoradico()));
System.out.println("La 90 permutación de orden 5 es:");
System.out.println(Arrays.toString(p1.getPermutacion()));
}
}
Código (Permutation.java):
package permutar4;
public class Permutation {
private int[] perm = null;
int[] factoradic;
public Permutation(int n, int k) {
this.perm = new int[n];
// Calcular factorádico de k
factoradic = new int[n];
for (int j = 1; j <= n; ++j) {
factoradic[n - j] = k % j;
k /= j;
}
// Convertir factoradic a permutación
int[] temp = new int[n];
for (int i = 0; i < n; ++i) {
temp[i] = ++factoradic[i];
}
this.perm[n - 1] = 1;
for (int i = n - 2; i >= 0; --i) {
this.perm[i] = temp[i];
for (int j = i + 1; j < n; ++j) {
if (this.perm[j] >= this.perm[i]) {
++this.perm[j];
}
}
}
for (int i = 0; i < n; ++i) {
--this.perm[i];
}
}
public int[] getFactoradico() {
return factoradic;
}
public int[] getPermutacion() {
return perm;
}
}
Resultado:
Elementos:
5
Decimal:
90
Factorádico:
[4, 4, 1, 1, 1]
La 90 permutación de orden 5 es:
[3, 4, 0, 1, 2]
BUILD SUCCESSFUL (total time: 0 seconds)