首页 > 试题广场 >

设栈的初始状态为空,当字符序列 "a3_" 作为栈的输入时,

[单选题]

设栈的初始状态为空,当字符序列 "a3_" 作为栈的输入时,输出长度为 3 的且可以用作 C 语言标识符的字符串序列有()个。

  • 4
  • 6
  • 3
  • 5
首先,栈的顺序是先进后出
字符序列为a3_   1)a入栈,再出栈,然后3入栈,再出栈,—入栈,再出栈   序列是a3_
                           2)a入栈,再出栈,然后3,—入栈,再出栈,序列是a_3
                           3)a入栈,3入栈,再出栈,a出栈, —入栈,再出栈   序列是3a_
                           4) a入栈,3入栈,再出栈, —入栈,序列是3_a
                           5) a入栈,3入栈,_入栈,序列是_3a
其次,C语言的标识符不能以数字开头,去除3a_和3_a   答案为3
发表于 2016-11-26 11:21:57 回复(16)
补充一下卡特兰数公式 h(n)=C(2n,n)/(n+1),适用于出栈情况求和
发表于 2017-01-09 07:24:34 回复(6)
可能大家都不知道卡特兰数公式是怎么计算的,比如我🤣🤣🤣
递推关系的解为:
h(n)=C(2n,n)/(n+1)     (n=0,1,2,...)
或许你不清楚C(2n,n)如何计算,转换如下:

比如:
所以,输出序列有5种情况,减去3开头的2种,答案就是3。
编辑于 2019-04-29 16:39:55 回复(0)
根据卡特兰数公式,所有的输出总数为5次,减掉3开头的2个为3个。
发表于 2016-12-16 17:36:05 回复(0)
标识符要求:字母或下划线开头。
a3_:当a第一个输出时,有a_3   a3_俩种;
当_第一个输出时,说明a和3已经入栈,此时出栈只可能是3 a
编辑于 2017-08-13 18:40:20 回复(0)
当字符序列a3_组成的可以用作C语言标识符的字符串序列有:a3_、a_3、_3a、_a3,共四个。
由于栈是后进先出,所以上述四个中满足条件的只有a3_、a_3、_3a,过程如下:
  1. a入栈,a出栈,3入栈,3出栈,_入栈,_出栈,得到a3_;
  2. a入栈,a出栈,3入栈,_入栈,_出栈,3出栈,得到a_3;
  3. a入栈,3入栈,_入栈,_出栈,3出栈,a出栈,得到_3a;
无论如何也无法得到_a3,所以答案选择C
发表于 2018-07-13 17:59:21 回复(0)
A33 =6,减去_a3这种不可能的出栈情况。6-1 = 5.
可以用作C语言标识符那么3不能开头,再减去2,即5-2=3
最后应该选C。

发表于 2017-08-10 15:07:45 回复(2)
补充一下卡特兰数公式 h(n)=C(2n,n)/(n+1),适用于出栈情况求和
发表于 2017-07-13 00:30:51 回复(1)
c语言标识符中有一条是不能以数字开头。 所以有a3_ a_3 _3a三种情况
发表于 2017-03-09 10:58:15 回复(2)
主要是要看清题目,不看清题目等于白做
发表于 2017-06-08 18:37:28 回复(0)
前面的大佬总结的很好了,我再做一点补充吧:
a、3、_  三个字符按照进栈出栈的顺序可以有a_3、a3_、_a3、3_a、3a_。
到这里很多小伙伴有疑惑为什么没有_a3
按照栈的规则,不会存在312这样的顺序!因为如果3先出栈,就意味着,3曾经进栈,既然3都进栈了,那也就意味着,1和2已经进栈了,此时2一定是在1的上面的,就是更接近栈顶,那么出栈只可能是321。
————引用自《大话数据结构》p91
发表于 2019-06-13 08:30:14 回复(1)
所有情况:
a3_,a_3
3a_
3_a,_3a
然后去掉不能作为文件名的3a_,3_a,所以还剩下3个
发表于 2017-01-17 09:12:11 回复(0)
3个字符,理论上有6中排列方式,但是变量的命名不能以数字开始,所以舍弃两种排列,也就只有4种了。最后分析出栈时以_开头的情况,只有_3a这一种,所以就只有3种排列了。
发表于 2022-04-08 17:14:45 回复(0)
根据卡特兰得出栈5种可能,但是去掉3ab,3ba两种可能
发表于 2022-01-28 21:54:28 回复(0)
编辑于 2017-07-27 22:21:29 回复(3)
a3_顺序入栈,故所有的合理出栈顺序只有5种,减去两种3开头的形式,只有3种。
发表于 2017-05-27 10:34:13 回复(0)

分别是:a3_.a_3,_3a.

首先,栈的顺序是先进后出

其次,C语言的标识符不能以数字开头,去除3a_和3_a   答案为3。

发表于 2017-03-29 09:36:34 回复(0)
C语言标识符不能以数字开头
发表于 2017-03-14 01:06:34 回复(0)

说一下该题不严谨的地方,C语言中的字符串长度是包括字符串末尾的空字符\0,所以长度应该为4

发表于 2023-08-28 23:05:58 回复(0)
出入栈的顺序可以由卡特兰公式计算 卡特兰公式h(n)=C(2n,n)/n+1. 这里h(3)=(6*5*4/3*2*1)/4=5 排除3开头的两种情况,答案为3
编辑于 2023-07-16 11:50:06 回复(0)