Encuentre la buena permutación de los primeros N números naturales

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>
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *