English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Programme pour le numéro catalan du n

Donné un entier n; la tâche consiste à trouver le numéro catalan à la position n. Par conséquent, avant d'exécuter le programme, nous devons savoir ce que sont les nombres catalans?

Les nombres catalans sont une séquence de nombres naturels qui apparaissent sous forme de divers problèmes de comptage.

Le nombre catalan C0, C1, C2,... Cn est déterminé par la formule-

$$c_ {n} = \frac {1} {n + 1} \binom {2n} {n} = \frac {2n!} { (n + 1) !n!} $$

Pour chaque n = 0,1,2,3,... Le catalan de ce nombre est1,1,2,5,14,42,132,429,1430,4862 ...

Par conséquent, si nous entreons n = 3Nous devrions obtenir cela du programme5En tant que sortie

Applications de certains nombres catalans-

  • Calculer le nombre de binary search trees possibles avec n clés.

  • Trouver le nombre d'expressions contenant n paires de parenthèses correspondantes. 3De même, les expressions d'encadrages possibles sont ((()()), ()(()), ()()(), (()()), ()(()()).

  • Chercher des méthodes pour connecter les points sur des arcs de cercle non intersectants, etc.

示例

Entrée: n = 6
Sortie: 132
Entrée: n = 8
Sortie: 1430

Nous utiliserons pour résoudre le problème donné-

  • Prendre et entrer n.

  • Vérifier si n <= 1ensuite, retourner1

  • Boucler de i = 0 à i <n et i ++

  • Pour chaque i, définir le résultat=le résultat+(catalan(i)* catalan(ni-1))

  • Retourner et imprimer le résultat.

Algorithme

Début
   Étape 1 -> Dans la fonction unsigned long int catalan(unsigned int n)
      Si n <= 1 alors,
         Retour 1
      Fin si
      Déclarer une variable unsigned long res = 0
      Boucle pour i=0 et i<n et i++
         Définir res = res + (catalan(i)*catalan(n-i-1))
      Fin de la boucle
      Retourner res
   Étape 2 -> int main() Declare une entrée n = 6
   Imprimer "catalan est : puis appeler la fonction catalan(n)
Arrêt

示例

#include <stdio.h>
//使用递归方法找到加泰罗尼亚数字
unsigned long int catalan(unsigned int n) {
   //基本情况
   if (n <= 1) return 1;
   //langue catalane(n) est langue catalane(i)*langue catalane(n-1)的总和
   unsigned long int res = 0;
   for (int i=0; i<n; i++)
      res += catalan(i)*catalan(n-i-1);
   return res;
}
//主要功能
int main() {
   int n =; 6;
   printf("catalan est :%ld\n", catalan(n));
   return 0;
}

输出结果

catalan est :132