初学者求助:入栈1234,出栈序列有几种?

黑主理事长 2007-12-09 08:06:14
如题。或者告诉我怎么算也可以。先谢谢了。
...全文
1005 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑主理事长 2008-01-08
  • 打赏
  • 举报
回复
谢谢p0303230
zimuqingyang 2007-12-14
  • 打赏
  • 举报
回复
明白.谢谢p0303230
p0303230 2007-12-12
  • 打赏
  • 举报
回复
比如第二种情况
1 进
2 进
3 进
3 出 3
4 进
4 出 34
。。。。
p0303230 2007-12-12
  • 打赏
  • 举报
回复
1,4321
2,3421
3,3241
4,3214
5,2431
6,2341
7,2314
8,2143
9,2134
10,1432
11,1342
12,1324
13,1243
14,1234
liquid_7788 2007-12-11
  • 打赏
  • 举报
回复
只知道一种,其他十几种都是什么,想了解下
p0303230 2007-12-11
  • 打赏
  • 举报
回复
把程序拷到你机子上运行一下就知道了
或者百度一下 这里不列出了
zimuqingyang 2007-12-11
  • 打赏
  • 举报
回复
楼上的弄得那么复杂阿,我就知道一种4321,呵呵,不知道其他的出栈顺序,麻烦楼上的赐教其他的出栈顺序,不胜感激
p0303230 2007-12-10
  • 打赏
  • 举报
回复
[code=C/C++]#include<fstream.h>
#include<stdio.h>
int sin[]= {1, 2, 3, 4};
const int N = sizeof(sin) / sizeof(int);
int push[N*2];
int s[N];
ofstream out("xx.txt");

void calcout(int snum, int innum, int opNum)
{
if (innum) {
push[opNum]=true;
calcout(snum+1, innum-1, opNum+1);
if (snum>0) {
push[opNum]=false;
calcout(snum-1, innum, opNum+1);
}
}else {
static int num = 1;
out<<num++<<",";
int i;
for (i=opNum; i<N*2; i++) push[i]=false;
int spos=0, inpos=0;
// 打印出栈顺序
for (i=0; i<N*2; i++) {
if (push[i])
{
s[spos++] = sin[inpos++];
}
else {
out<<s[--spos];
}
}
// 打印出栈顺序对应的进出栈操作序列
for (i=0; i<N*2; i++) {
if (push[i]) out<<"<" ;
else out<<">";
}
out<<"\n";
}
}
int main(int argc, char* argv[])
{
calcout(0, N, 0);
return 0;
}
[/code]
p0303230 2007-12-10
  • 打赏
  • 举报
回复
14种

[1/(n+1)]*[(2n)!/(n!)^2]

或者
f(0) = 1
f(1) = 1
f(2) = f(0)*f(1) + f(1)*f(0) = 2
f(3) = f(0)*f(2) + f(1)*f(1) + f(2)*f(0) = 5
..........
f(n) = f(0)*f(n - 1) + f(1)*f(n - 2) + ......... + f(n-2)*f(1) + f(n-1)*f(0)
[code=C/C++]
#include<fstream.h>
#include<stdio.h>
int sin[]= {1, 2, 3, 4};
const int N = sizeof(sin) / sizeof(int);
int push[N*2];
int s[N];
ofstream out("xx.txt");

void calcout(int snum, int innum, int opNum)
{
if (innum) {
push[opNum]=true;
calcout(snum+1, innum-1, opNum+1);
if (snum>0) {
push[opNum]=false;
calcout(snum-1, innum, opNum+1);
}
}else {
static int num = 1;
out<<num++<<",";
int i;
for (i=opNum; i<N*2; i++) push[i]=false;
int spos=0, inpos=0;
// 打印出栈顺序
for (i=0; i<N*2; i++) {
if (push[i])
{
s[spos++] = sin[inpos++];
}
else {
out<<s[--spos];
}
}
// 打印出栈顺序对应的进出栈操作序列
for (i=0; i<N*2; i++) {
if (push[i]) out<<"<" ;
else out<<">";
}
out<<"\n";
}
}
int main(int argc, char* argv[])
{
calcout(0, N, 0);
return 0;
}[/code]
p0303230 2007-12-10
  • 打赏
  • 举报
回复
14种

[1/(n+1)]*[(2n)!/(n!)^2]

或者
f(0) = 1
f(1) = 1
f(2) = f(0)*f(1) + f(1)*f(0) = 2
f(3) = f(0)*f(2) + f(1)*f(1) + f(2)*f(0) = 5
..........
f(n) = f(0)*f(n - 1) + f(1)*f(n - 2) + ......... + f(n-2)*f(1) + f(n-1)*f(0)
#include<fstream.h>
#include<stdio.h>
int sin[]= {1, 2, 3, 4};
const int N = sizeof(sin) / sizeof(int);
int push[N*2];
int s[N];
ofstream out("xx.txt");

void calcout(int snum, int innum, int opNum)
{
if (innum) {
push[opNum]=true;
calcout(snum+1, innum-1, opNum+1);
if (snum>0) {
push[opNum]=false;
calcout(snum-1, innum, opNum+1);
}
}else {
static int num = 1;
out<<num++<<",";
int i;
for (i=opNum; i<N*2; i++) push[i]=false;
int spos=0, inpos=0;
// 打印出栈顺序
for (i=0; i<N*2; i++) {
if (push[i])
{
s[spos++] = sin[inpos++];
}
else {
out<<s[--spos];
}
}
// 打印出栈顺序对应的进出栈操作序列
for (i=0; i<N*2; i++) {
if (push[i]) out<<"<" ;
else out<<">";
}
out<<"\n";
}
}
int main(int argc, char* argv[])
{
calcout(0, N, 0);
return 0;
}
p0303230 2007-12-10
  • 打赏
  • 举报
回复
4321

1,159

社区成员

发帖
与我相关
我的任务
社区描述
在CSDN学院遇到的问题反馈及对学院的改进建议等。
社区管理员
  • 软件培训社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧