C语言 · 出栈次序

标题:出栈次序

X星球特别讲究秩序,所有道路都是单行线。一个甲壳虫车队,共16辆车,按照编号先后发车, 夹在其它车流中,缓缓前行。

路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】所示。

X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查。

如果车辆进入检查站和离开的次序可以任意交错。那么,该车队再次上路后,可能的次序有多少种?

为了方便起见,假设检查站可容纳任意数量的汽车。

显然,如果车队只有1辆车,可能次序1种;2辆车可能次序2种;3辆车可能次序5种。

现在足足有16辆车啊,亲!需要你计算出可能次序的数目。

这是一个整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性文字)。

方法一:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 int main(){
 5     int sum=0;
 6     int f[17];
 7     memset(f,0,sizeof(f));//注意要赋初值
 8     f[0]=1;
 9     f[1]=1;
10     f[2]=2;
11     f[3]=5;
12     for(int i=4;i<=16;i++){
13         for(int j=0;j<=i-1;j++){
14             f[i]+=f[j]*f[i-1-j];
15         }
16     }
17     printf("%d",f[16]);
18     return 0;
19 }

方法二:

 1 #include<stdio.h>
 2 int ans=0;
 3 void dfs(int n,int r,int i){
 4     if(n==32){
 5         ans++;
 6         return;
 7     }
 8     if(r>i){
 9         if(r<16){
10             dfs(n+1,r+1,i);
11         }
12         if(i<16){
13             dfs(n+1,r,i+1);
14         }
15     }else{
16         if(r==i){
17             if(r<16){
18                 dfs(n+1,r+1,i);
19             }
20         }
21     }
22     return;
23 }
24 int main(){
25     dfs(0,0,0);
26     printf("%d",ans);
27     return 0;
28 }
时间: 2024-10-18 12:49:24

C语言 · 出栈次序的相关文章

给定序列,求这个序列的出栈次序

比如1,2,3 的出栈次序可以是{1,2,3}{2,1,3}{2,3,1}{1,3,2}{3,2,1}5种. 其实这个 和leetcode生成括号那个题目很像.题目链接https://leetcode.com/problems/generate-parentheses/ 题解 http://www.cnblogs.com/pk28/p/5355711.html Given n pairs of parentheses, write a function to generate all combi

数据结构学习——栈的出栈次序及次序种类

学过数据结构的程序猿应该都清楚,栈是一种先入后出,后入先出(LIFO)的表.即插入和删除都只能在一个位置上进行,即栈顶位置.对栈的基本操作有Push(入栈)和Pop(出栈).在一般软件研发的笔试中,就会经常遇到关于入栈次序一定时,出栈次序有哪些?共有几种? 其实,此处只要了解一下卡特兰数的算法结构,参见: http://baike.baidu.com/link?url=T7ZR16yiaWKNQPhem12nYJS56PqVeizOPnsGhBlynVFEy6JbB8CrMYKIetkvYm4Q

第五届蓝桥杯决赛C\C++B组——出栈次序

第一部分:题目 出栈次序 X星球特别讲究秩序,所有道路都是单行线.一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行. 路边有个死胡同,只能容一辆车通过,是临时的检查站. X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查. 如果车辆进入检查站和离开的次序可以任意交错.那么,该车队再次上路后,可能的次序有多少种? 为了方便起见,假设检查站可容纳任意数量的汽车. 显然,如果车队只有1辆车,可能次序1种:2辆车可能次序2种:3辆车可能次序5种. 现在

递归输出所有出栈次序及卡塔兰数应用

用ArrayList模拟栈的操作,采用递归算法.代码如下: 1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 public class stackAll { 5 static int num=0; 6 public static void main(String[] args) { 7 Scanner scanner=new Scanner(System.in); 8 int n=scanner.nextInt();//输

出栈次序--数学归纳法--蓝桥

出栈次序   X星球特别讲究秩序,所有道路都是单行线.一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行.    路边有个死胡同,只能容一辆车通过,是临时的检查站,如图[p1.png]所示.    X星球太死板,要求每辆路过的车必须进入检查站,也可能不检查就放行,也可能仔细检查.    如果车辆进入检查站和离开的次序可以任意交错.那么,该车队再次上路后,可能的次序有多少种?    为了方便起见,假设检查站可容纳任意数量的汽车.    显然,如果车队只有1辆车,可能次序1种:2

写一个算法判断出栈顺序是否正确

入栈的数据:1234567 解决思路: 简单的模拟出栈入栈操作,将元素依次入栈.然后根据输入的次序依次出栈.比如给出的出栈次序是 1 4 3 7 6 2 5,首先将1入栈,发现输入数据 中的第一个正好是1.将1出栈,下面是4,由于栈是空,并且刚才只把1入栈,接下来将2 3 4依次入栈,些时栈顶元素是4,与输入数据的第二个元素相 等,将4出栈.然后3出栈,接下来处理7,由于此时栈顶元素是2,7大于2所以接下来将5 6 7依次入栈(栈中元素为7 6 5 2).然后栈顶元素与 输入数据的7比较相等,7

Catalan数 &amp;&amp; 【NOIP2003】出栈序列统计

令h(1)=1, h(0)=1,catalan数满足递归式: h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)h(0) (n>=2) =C(2n, n)/(n+1) =h(n-1)*2(2n-1)/(n+1) 具体推导请百度,这里只需记得推导公式为h(n)=h(n-1)*2(2n-1)/(n+1)即可. 我们来说说这个的应用吧,从catalan数的定义递归定义可以看出,它是由自己 本身的一部分和n减去一部分 的和得到的,也就是说,有n个物品,1个物品进行操作1,n-

c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)

1 //c语言描述 将2进制转化为10进制 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define STACK_INIT_SIZE 20 6 #define //栈满后再分配 7 8 typedef char ElemType; 9 typedef struct 10 { 11 ElemType *base; //栈底 12 ElemType *top; //栈底 13 int s

C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋值*/ #include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define OK 1#define ERROR 0#define NAMESIZE 255//字符串的最大长度