📌  相关文章
📜  找到2N个数字的排列,以使给定表达式的结果恰好是2K

📅  最后修改于: 2021-04-23 17:08:24             🧑  作者: Mango

给定两个整数NK ,任务是找到前2 * N个自然数的置换,以便满足以下方程式。
 \sum\limits_{i=1}^N |A_{2i-1}-A_{2i}| - |\sum\limits_{i=1}^N A_{2i-1}-A_{2i}|=2K

注意: 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-12i ,结果将恰好增加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)