English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Данное целое число n; задача - найти каталонский номер на n-м месте. Таким образом, перед выполнением программы我们必须 знать, что такое каталонские числа?
Числа Каталана являются последовательностью натуральных чисел,出现的各种计数ных задачах.
Каталонские числа C0, C1, C2, ... Cn определяются формулой -
c_{n} = frac{1}{n + 1} binom{2n}{n} = frac{2n!}{(n + 1)!n!}
Каталонские числа для n = 0, 1, 2, 3, ... и т.д.1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862 ...
Таким образом, если мы вводим n = 3, мы должны получить 5 в качестве вывода из программы
Некоторые приложения каталонских чисел-
Рассчитать количество возможных двоичных搜索 деревьев с помощью n ключей.
Найти количество выражений, содержащих n пар правильно совпадающих скобок. Например, при n = 3 возможные выражения с скобками: ((()))(), ()(()), ()()(), (()()), (()()).
Методы поиска точек соединения на不相交的 дугах окружности и т.д.
Ввод: n = 6 Вывод: 132 Ввод: n = 8 Вывод: 1430
Метод, который мы будем использовать для решения данной задачи-
Взять и ввести n.
Проверить n <= 1, затем вернуть 1
Цикл от i = 0 до i < n и i++
Для каждого i установить результат = результат + (catalan(i) * catalan(n - i - 1))
Вернуть и вывести результат.
Начало Шаг 1 -> В функции unsigned long int catalan(unsigned int n) Если n <= 1 тогда, Вернуть 1 Конец if Установить unsigned long переменную res = 0 Цикл для i=0 и i<n и i++ Установить res = res + (catalan(i) * catalan(n - i - 1)) Конец цикла Вернуть res Шаг 2 -> int main() -> Declare an input n = 6 Вывести "Catalan is :", затем вызвать функцию catalan(n) Стоп
#include <stdio.h> //Использование рекурсивного метода для нахождения Catalan чисел unsigned long int catalan(unsigned int n) { //Основные условия if (n <= 1) return 1; //Catalan (n) равен сумме Catalan (i) * Catalan (n - i - 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 is :%ld\n", catalan(n)); return 0; }
Результат вывода
Catalan is :132