给定整数N ,任务是打印前N个自然数的良好排列。让我们将置换的第i个元素表示为p i 。
好的排列是这样的排列:对于所有1≤i≤N ,以下等式成立,
- p pi =我
- 我!=我
基本上,以上表达式表示没有值等于其位置。
如果不存在这样好的排列,则打印-1 。
例子:
Input: N = 1
Output: -1
No good permutation exists.
Input: N = 2
Output: 2 1
Position of 2 is 1 and position of 1 is 2.
方法:考虑置换p ,使p i = i 。实际上, p是一个从1到N的数字序列,并且p pi = i 。
现在唯一的技巧是改变排列以满足第二个等式,即p i != i 。让我们交换每两个连续的元素。更正式地讲,对于每个k : 2k≤n,让我们交换p 2k – 1和p 2k 。很容易看出,获得的置换满足每个n的两个方程,唯一的例外是:当n为奇数时,没有答案,我们应该打印-1 。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
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
Javascript
输出:
2 1 4 3