Dado un número entero N , la tarea es imprimir una buena permutación de los primeros N números naturales. Denotemos el i -ésimo elemento de la permutación como p i .
Una buena permutación es una permutación tal que para todo 1 ≤ i ≤ N se cumplen las siguientes ecuaciones,
- p pi = yo
- p yo ! = yo
Básicamente, las expresiones anteriores significan que ningún valor es igual a su posición.
Si no existe una permutación tan buena, imprima -1 .
Ejemplos:
Entrada: N = 1
Salida: -1
No existe una buena permutación.
Entrada: N = 2
Salida: 2 1
La posición de 2 es 1 y la posición de 1 es 2.
Enfoque: Considere la permutación p tal que p i = i . En realidad, p es una secuencia de números del 1 al N y p pi = i .
Ahora el único truco es cambiar la permutación para satisfacer la segunda ecuación, es decir, p i != i . Intercambiemos cada dos elementos consecutivos. Más formalmente, para cada k : 2k ≤ n intercambiemos p 2k – 1 y p 2k . Es fácil ver que la permutación obtenida satisface ambas ecuaciones para cada ncon la única excepción: cuando n es impar, no hay respuesta y debemos imprimir -1 .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to print the good permutation // of first N natural numbers int printPermutation(int n) { // If n is odd if (n % 2 != 0) cout << -1; // Otherwise else for (int i = 1; i <= n / 2; i++) cout << 2 * i << " " << 2 * i - 1 << " "; } // Driver code int main() { int n = 4; printPermutation(n); return 0; }
Java
// Java implementation of the approach class GFG { // Function to print the good permutation // of first N natural numbers static int printPermutation(int n) { // If n is odd if (n % 2 != 0) { System.out.println("-1"); } // Otherwise else for (int i = 1; i <= n / 2; i++) { System.out.print(2 * i + " " + ((2 * i) - 1) + " "); } return n; } // Driver code public static void main(String []args) { int n = 4; printPermutation(n); } } // This code contributed by Rajput-Ji
Python3
# Python3 implementation of the approach # Function to print the good permutation # of first N natural numbers def printPermutation(n): # If n is odd if (n % 2 != 0): print(-1); # Otherwise else: for i in range(1, (n // 2) + 1): print((2 * i), (2 * i - 1), end = " "); # Driver code n = 4; printPermutation(n); # This code is contributed by mits
C#
// C# implementation of the approach using System; class GFG { // Function to print the good permutation // of first N natural numbers static int printPermutation(int n) { // If n is odd if (n % 2 != 0) { Console.WriteLine("-1"); } // Otherwise else for (int i = 1; i <= n / 2; i++) { Console.WriteLine(2 * i + " " + ((2 * i) - 1) + " "); } return n; } // Driver code public static void Main(String []args) { int n = 4; printPermutation(n); } } // This code is contributed by Kirti_Mangal
PHP
<?phP // PHP implementation of the approach // Function to print the good permutation // of first N natural numbers function printPermutation($n) { // If n is odd if ($n % 2 != 0) { echo("-1"); } // Otherwise else for ($i = 1; $i <= $n / 2; $i++) { echo(2 * $i . " " . ((2 * $i) - 1) . " "); } return $n; } // Driver code $n = 4; printPermutation($n); // This code contributed // by Code_Mech. ?>
Javascript
<script> // Javascript implementation of the approach // Function to print the good permutation // of first N natural numbers function printPermutation(n) { // If n is odd if (n % 2 != 0) document.write(-1); // Otherwise else for (let i = 1; i <= Math.floor(n / 2); i++) document.write((2 * i) + " " + ((2 * i) - 1) + " "); } // Driver code let n = 4; printPermutation(n); //This code is contributed by Manoj </script>
2 1 4 3
Complejidad de tiempo: O(n)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por pawan_asipu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA