📜  排列数量,以使三个术语都不构成增加的子序列

📅  最后修改于: 2021-05-04 20:32:13             🧑  作者: Mango

给定数字N。任务是找到1到N的排列数,以使排列的三个项都不形成递增的子序列。

例子

Input : N = 3
Output : 5
Valid permutations : 132, 213, 231, 312 and 321 and not 123

Input : N = 4
Output : 14

上面的问题是加泰罗尼亚语数字的应用。因此,任务是仅找到第n个加泰罗尼亚编号。前几个加泰罗尼亚语数字是1,1,2,5,14,42,132,429,1430,4862,…(从0数开始考虑)

以下是查找N加泰罗尼亚语编号的程序:

C++
// C++ program to find the
// nth catalan number
#include 
using namespace std;
  
// Returns value of Binomial Coefficient C(n, k)
unsigned long int binomialCoeff(unsigned int n,
                                unsigned int k)
{
    unsigned long int res = 1;
  
    // Since C(n, k) = C(n, n-k)
    if (k > n - k)
        k = n - k;
  
    // Calculate value of
    // [n*(n-1)*---*(n-k+1)] / [k*(k-1)*---*1]
    for (int i = 0; i < k; ++i) {
        res *= (n - i);
        res /= (i + 1);
    }
  
    return res;
}
  
// A Binomial coefficient based function
// to find nth catalan
// number in O(n) time
unsigned long int catalan(unsigned int n)
{
    // Calculate value of 2nCn
    unsigned long int c = binomialCoeff(2 * n, n);
  
    // return 2nCn/(n+1)
    return c / (n + 1);
}
  
// Driver code
int main()
{
    int n = 3;
  
    cout << catalan(n) << endl;
  
    return 0;
}


Java
// Java program to find the
// nth catalan number
import java.io.*;
  
class GFG
{
  
// Returns value of Binomial
// Coefficient C(n, k)
static long binomialCoeff(long n, long k)
{
    long res = 1;
  
    // Since C(n, k) = C(n, n-k)
    if (k > n - k)
        k = n - k;
  
    // Calculate value of
    // [n*(n-1)*---*(n-k+1)] / 
    // [k*(k-1)*---*1]
    for (int i = 0; i < k; ++i) 
    {
        res *= (n - i);
        res /= (i + 1);
    }
  
    return res;
}
  
// A Binomial coefficient based 
// function to find nth catalan
// number in O(n) time
static long catalan(long n)
{
    // Calculate value of 2nCn
    long c = binomialCoeff(2 * n, n);
  
    // return 2nCn/(n+1)
    return c / (n + 1);
}
  
// Driver code
public static void main (String[] args) 
{
    int n = 3;
      
    System.out.println(catalan(n));
}
}
  
// This code has been contributed
// by inder_verma.


Python3
# Python program to find the 
# nth catalan number 
  
# Returns value of Binomial 
# Coefficient C(n, k) 
def binomialCoeff(n, k):
    res = 1
      
    # Since C(n, k) = C(n, n-k)
    if k > n - k:
        k=n-k
    # Calculate value of 
    # [n*(n-1)*---*(n-k+1)] // 
    # [k*(k-1)*---*1]
  
    for i in range(k):
        res = res * (n - i)
        res = res // (i + 1)
    return res
      
# A Binomial coefficient based 
# function to find nth catalan 
# number in O(n) time 
def catalan(n):
      
    # Calculate value of 2nCn 
    c = binomialCoeff(2 * n, n)
      
    # return 2nCn/(n+1) 
    return c // (n + 1)
      
# Driver code 
n = 3
print(catalan(n))
  
# This code is contributed 
# by sahil shelangia


C#
// C# program to find the
// nth catalan number
using System;
  
class GFG
{
  
// Returns value of Binomial
// Coefficient C(n, k)
static long binomialCoeff(long n, 
                          long k)
{
    long res = 1;
  
    // Since C(n, k) = C(n, n-k)
    if (k > n - k)
        k = n - k;
  
    // Calculate value of
    // [n*(n-1)*---*(n-k+1)] / 
    // [k*(k-1)*---*1]
    for (int i = 0; i < k; ++i) 
    {
        res *= (n - i);
        res /= (i + 1);
    }
  
    return res;
}
  
// A Binomial coefficient based 
// function to find nth catalan
// number in O(n) time
static long catalan(long n)
{
    // Calculate value of 2nCn
    long c = binomialCoeff(2 * n, n);
  
    // return 2nCn/(n+1)
    return c / (n + 1);
}
  
// Driver code
public static void Main (String[] args) 
{
    int n = 3;
      
    Console.WriteLine(catalan(n));
}
}
  
// This code is contributed
// by Kirti_Mangal


PHP
$n - $k)
        $k = $n - $k;
          
    // Calculate value of 
    // [n*(n-1)*---*(n-k+1)] // 
    // [k*(k-1)*---*1]
    for ($i = 0; $i < $k; $i++)
    {
        $res = $res * ($n - $i);
        $res = $res / ($i + 1);
    }
    return $res;
}
  
// A Binomial coefficient based 
// function to find nth catalan 
// number in O(n) time 
function catalan($n)
{ 
    // Calculate value of 2nCn 
    $c = binomialCoeff(2 * $n, $n);
      
    // return 2nCn/(n+1) 
    return $c / ($n + 1);
}
  
// Driver code 
$n = 3;
print(catalan($n));
  
// This code is contributed 
// by mits
?>


输出:
5