编程语言
首页 > 编程语言> > C语言编程练习38:火车出站

C语言编程练习38:火车出站

作者:互联网

题目描述

铁路进行列车调度时,常把站台设计成栈式结构的站台,试问:
设有编号为1到n的n辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种?

输入

输入包含多组测试数据。每组为一个正整数n(1<=n<=20),表示有n辆列车。

输出

输出可能的出栈序列有多少种。

样例输入 Copy

4
3

样例输出 Copy

14
5


思路:一开始用全排列函数,判断每个序列是否是合法的出栈序列,但是超时了。所以直接卡塔兰数计算公式
      (2*n)! / (n! *(n + 1)!) (其中n>=1)
但是要优化一下,因为可能溢出,不用int用longlong
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;


int main()
{
   int n;

   while(cin >> n)
   {
       long long s=1;
       for(int i=1;i<=n;i++)
       {
           s=s*(n+i)/i;
       }
       cout << s/(n+1) << endl;
   }
    return 0;
}

 

 

标签:38,出栈,int,C语言,出站,序列,站台,include,Copy
来源: https://www.cnblogs.com/FantasticDoubleFish/p/14336667.html