Given an integer N, the task is to print a good permutation of first N natural numbers. Let’s denote the ith element of the permutation be pi.
A good permutation is a permutation such that for all 1 ≤ i ≤ N the following equations hold true,
- ppi = i
- pi != i
Basically above expressions mean, no value is equal to its position.
If no such good permutation exists then print -1.
Input: N = 1
No good permutation exists.
Input: N = 2
Output: 2 1
Position of 2 is 1 and position of 1 is 2.
Approach: Consider permutation p such that pi = i. Actually, p is a sequence of numbers from 1 to N and ppi = i.
Now the only trick is to change the permutation to satisfy the second equation i.e. pi != i. Let’s swap every two consecutive elements. More formally, for each k: 2k ≤ n let's swap p2k – 1 and p2k. It’s easy to see that the obtained permutation satisfies both the equations for every n with the only exception: when n is odd, there is no answer and we should print -1.
Below is the implementation of the above approach:
2 1 4 3
- Find permutation of first N natural numbers that satisfies the given condition
- Find the number of sub arrays in the permutation of first N natural numbers such that their median is M
- Program to find sum of first n natural numbers
- Find m-th summation of first n natural numbers.
- Find if given number is sum of first n natural numbers
- Find the average of first N natural numbers
- Find sum of N-th group of Natural Numbers
- Find a permutation of 2N numbers such that the result of given expression is exactly 2K
- Find maximum N such that the sum of square of first N natural numbers is not more than X
- Find ways an Integer can be expressed as sum of n-th power of unique natural numbers
- Print all Good numbers in given range
- Find all good indices in the given Array
- Find the number of good permutations
- Find the shortest distance between any pair of two different good nodes
- Find two disjoint good sets of vertices in a given graph
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.