栈—输出栈的次序总数
2018-03-24 15:20
113 查看
问题描述:宁宁考虑的是这样一个问题:一个操作数序列,从1,2,一直到n,栈A的深度大于n。 现在可以进行两种操作: 1. 进栈操作push 2. 出栈操作pop 使用这2个操作,由一个操作数序列就可以得到一系列的输出序列。 例如,对于一个操作数序列1 2 3,那么出栈序列为: (1)1 2 3 (2)3 2 1 (3)2 1 3 (4)2 3 1 (5)1 3 2 现在对于任意一个N,输入端的数据一定是1,2,3...N。求出可能出现的输出端数据序列的种数。输入:
第一行为一个数字T,表示有T组数据。 每组数据只含一个整数n(1≤n≤9)
输出:
对于每组数据,输出可能得到的输出序列的总数目。
输入样式:
1
3
输出样式:
5
解题原理:
这里用了栈里面的总次序的一个数学公式,
,其中cnt就是我们要求的总次数,而n是指一个栈中存在几个数。
我将这个经过化解后,得到cnt=[(2n)!/(n!*n!)]/(n+1).因此我写了一个factorial来专门处理阶乘。然后用c语言写出这个式子,运算即可。
代码:#include<stdio.h>
long long int factorial(int n)
{
long long int sum=1;
for (int i=1;i<=n;i++){
sum*=i;
}
return sum;
}
int main()
{
int n,m;
scanf("%d",&m);
while(m--){
scanf("%d",&n);
long long int sum;
sum=factorial(2*n)/(factorial(n)*factorial(n));
sum=sum/(n+1);
printf("%lld\n",sum);
}
return 0;
}
第一行为一个数字T,表示有T组数据。 每组数据只含一个整数n(1≤n≤9)
输出:
对于每组数据,输出可能得到的输出序列的总数目。
输入样式:
1
3
输出样式:
5
解题原理:
这里用了栈里面的总次序的一个数学公式,
,其中cnt就是我们要求的总次数,而n是指一个栈中存在几个数。
我将这个经过化解后,得到cnt=[(2n)!/(n!*n!)]/(n+1).因此我写了一个factorial来专门处理阶乘。然后用c语言写出这个式子,运算即可。
代码:#include<stdio.h>
long long int factorial(int n)
{
long long int sum=1;
for (int i=1;i<=n;i++){
sum*=i;
}
return sum;
}
int main()
{
int n,m;
scanf("%d",&m);
while(m--){
scanf("%d",&n);
long long int sum;
sum=factorial(2*n)/(factorial(n)*factorial(n));
sum=sum/(n+1);
printf("%lld\n",sum);
}
return 0;
}
相关文章推荐
- 两个字符串 char* a, char* b,输出b在a中的位置次序
- 把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”;
- 把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”
- hadoop中Map的输出文件命名与分片次序一致
- 【C语言】在全系1000个学生中,征集慈善捐款当总数达到10万的时候,停止捐款,统计人数,并输出平均捐款数
- Java中利用递归实现斐波纳斯数列的兔子问题,动态输出兔子的总数
- 初探二叉树之动态创建,前.中,后序遍历的递归及非递归实现,层次遍历,树状输出,叶节点及节点总数的统计
- 程序员面试宝典 8.2 典型递归问题: 面试例题1: 输入两个字符串,比如 abdbcc 和 abc, 输出第二个字符串在第一个字符串中的连接次序。即输出 125, 126, 145, 146.
- 设两个二维数组,分别用两种方式进行初始化,并分别按照行优先(1>.先输出第一行所有值,再输出第二行)、列优先(先输出第一列的所有值,再输出第二列)的次序输出。
- 字符串问题:输出第二个字符串在第一个字符串中的连接次序
- 爬楼梯问题,输出总数以及过程
- Java参考项目—输出赛车总数,并输出车手信息
- 对于一个n位正整数a,去掉其中任意k(k<=n)个数字后,剩下的数字按原次序排列可以组成一个新的正整数。设计一个删数算法,使得剩下的数字组成的正整数最小。例如,a=13243221,k=5,输出:12
- 把一个英语句子中的单词次序颠倒后输出
- 判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)
- 开启一个文本文件,并将该文档内字符以相反次序输出到另一个文档中
- 2>.设两个二维数组,分别用两种方式进行初始化,并分别按照行优先(先输出第一行所有值,再输出第二行)、列优先(先输出第一列的所有值,再输出第二列)的次序输出。
- 递归输出所有出栈次序及卡塔兰数应用
- 给定入栈序列1、2、3、4、5,输出所有的出栈序列和总数
- 随机选取0——100内的十个数,并按从小到大的次序排列输出!(冒泡法)