给定两个整数N和K ,任务是找到前2 * N个自然数的置换,以便满足以下方程式。
注意: K的值将始终小于或等于N。
例子:
Input : N = 1, K = 0
Output : 1 2
The result of the above expression will be:
|1-2|-|1-2| =0
Input : N = 2, K = 1
Output : 2 1 3 4
The result of the above expression will be:
(|2-1|+|3-4|)-(|2-1+3-4|) = 2
方法:
考虑排序的排列:
1, 2, 3, 4, 5, 6....
表达式的结果将恰好为0。如果我们交换任意2个索引2i-1和2i ,结果将恰好增加2。因此,我们需要进行K次这样的交换。
下面是上述方法的实现:
C++
// C++ program to find the required permutation
// of first 2*N natural numbers
#include
using namespace std;
// Function to find the required permutation
// of first 2*N natural numbers
void printPermutation(int n, int k)
{
// Iterate in blocks of 2
for (int i = 1; i <= n; i++) {
int x = 2 * i - 1;
int y = 2 * i;
// We need more increments, so print in reverse order
if (i <= k)
cout << y << " " << x << " ";
// We have enough increments, so print in same order
else
cout << x << " " << y << " ";
}
}
// Driver Code
int main()
{
int n = 2, k = 1;
printPermutation(n, k);
return 0;
}
Java
// Java program to find the
// required permutation
// of first 2*N natural numbers
class GFG
{
// Function to find the required permutation
// of first 2*N natural numbers
static void printPermutation(int n, int k)
{
// Iterate in blocks of 2
for (int i = 1; i <= n; i++)
{
int x = 2 * i - 1;
int y = 2 * i;
// We need more increments,
// so print in reverse order
if (i <= k)
System.out.print(y + " " + x + " ");
// We have enough increments,
// so print in same order
else
System.out.print(x + " " + y + " ");
}
}
// Driver code
public static void main(String []args)
{
int n = 2, k = 1;
printPermutation(n, k);
}
}
// This code is contributed by Ita_c.
Python3
# Python3 program to find the required
# permutation of first 2*N natural numbers
# Function to find the required permutation
# of first 2*N natural numbers
def printPermutation(n, k) :
# Iterate in blocks of 2
for i in range(1, n + 1) :
x = 2 * i - 1;
y = 2 * i;
# We need more increments,
# so print in reverse order
if (i <= k) :
print(y, x, end = " ");
# We have enough increments,
# so print in same order
else :
print(x, y, end = " ");
# Driver Code
if __name__ == "__main__" :
n = 2; k = 1;
printPermutation(n, k);
# This code is contributed by Ryuga
C#
using System;
// C# program to find the
// required permutation
// of first 2*N natural numbers
class GFG
{
// Function to find the required permutation
// of first 2*N natural numbers
static void printPermutation(int n, int k)
{
// Iterate in blocks of 2
for (int i = 1; i <= n; i++)
{
int x = 2 * i - 1;
int y = 2 * i;
// We need more increments,
// so print in reverse order
if (i <= k)
Console.Write(y + " " + x + " ");
// We have enough increments,
// so print in same order
else
Console.Write(x + " " + y + " ");
}
}
// Driver code
public static void Main()
{
int n = 2, k = 1;
printPermutation(n, k);
}
}
// This code is contributed by
// shashank_sharma
PHP
输出:
2 1 3 4
时间复杂度: O(N)
辅助空间:O(1)