社区
数据结构与算法
帖子详情
求教算法,不知道这个难不难
zgy231552
2002-05-17 04:29:39
1,2,3,4,5....n 按顺序进栈,设计一个算法,输出所有可能的出栈可能
...全文
86
7
打赏
收藏
求教算法,不知道这个难不难
1,2,3,4,5....n 按顺序进栈,设计一个算法,输出所有可能的出栈可能
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zgy231552
2002-05-19
打赏
举报
回复
大家写写看,我回去好好想想.................
pigsanddogs
2002-05-18
打赏
举报
回复
我的思路:
fun(n):以第一个数出践为标识.那有n-1种可能;
它可以尾随2,3...n 出践比如尾随m出践.在操作(出践)它之前,他一直是践底.其余数的操作都不跟他有关.所以有fun(m-1).而之后操作(出践)它以后.践为空了.之后还余下n-m个待排有续数.他的操作方法为fun(n-m).
所以可以分解成 fun(n)=fun(0)*fun(n-1)+fun(1)*fun(n-2)+...+fun(n-1)*fun(0) fun(1)=0并且定义fun(0)=1.
程序实现:
#include <iostream.h>
#include <stdio.h>
#define MAX_NUMBER 3
void push(int n)
{
cout<<"push("<<n<<")";
}
void pop(int n)
{
cout<<"pop("<<n<<")";
}
void fun(int start,int end)
{
for(int i=start;i<=end;i++)
{
push(start);
if(i!=start)
fun(start+1,i);
pop(start);
if(i!=end)
fun(i+1,end);
cout<<endl;
}
}
void main()
{
fun(1,MAX_NUMBER);
}
/*这个递归函数有个bug.我不知道怎么修改.比如fun(1,3)递归成为=push(1),fun(2,3),pop(1).<----其中一个解;
本来因该把fun(2,3)={push(2),pop(2),fun(3,3) },{push(2),fun(2,3),pop(2)},每个分解式都要加入 push(1),pop(1),可以用递归方法我无法展开.只是成为了 push(1),{push(2),pop(2),fun(3,3),{push(2),fun(2,3),pop(2),}pop(1)....欢迎大家指正..!
另外 leopro(六月飞雪) 的思路不错.谁能把算法写出来?
*/
javan
2002-05-18
打赏
举报
回复
我写了个程序,用比较笨的方法,用循环输出。
例如,用数组a[4]={'a','b','c','d'}的下标0,1,2,3来表示进栈顺序。
然后根据栈的特性写出一个符合其特性的表达式。
#include<stdio.h>
void main(void)
{
int i,j,k,l;
char a[4]={'A','B','C','D'};
i=j=k=l=0;
for(;i<4;i++)
{
for(j=0;j<4;j++)
{
if(i!=j)
{
for(k=0;k<4;k++)
{
if(i!=k&&j!=k)
{
for(l=0;l<4;l++)
{
if(l!=i&&l!=j&&l!=k)
{
if((i>k&&j<k)||(j>l&&l>k)) ;
else
{
printf("%c",a[i]);printf(" ");
printf("%c",a[j]);printf(" ");
printf("%c",a[k]);printf(" ");
printf("%c",a[l]);
printf("\n");
}
}
}
}
}
}
}
}
}
zgy231552
2002-05-17
打赏
举报
回复
我看你们都比较轻视这个问题,这个问题的所有可能的出栈可能为:(2n)!/(n+1)!
好像没有一本数据结构书有输出所有的可能序列的算法.
我是这样理解的:每个元素都有两种可能留在堆栈里面或者直接输出.所以可以构造这样一颗二叉树,但是输出的不全,问题就是,在一个元素输出的时候,此时的堆栈也有两种可能....,比较复杂.那位高人写写看 .
huahao0672
2002-05-17
打赏
举报
回复
数据结构的书上这类算法太多了,自已去看一下书吧!
leopro
2002-05-17
打赏
举报
回复
楼上理解错误
设t(i)时刻栈中有k个元素,可能出栈元素个数为m(0<=m<=k)
t(i+1)时刻又进栈一元素,此时栈中元素个数为k-m+1
……
不难
kbsoft
2002-05-17
打赏
举报
回复
如果是按顺序进栈,只能按相反顺序出来
除非你是说有多少种进展可能?
学编程到底
难
不
难
?自学编程可行吗?
大部分人觉得编程
难
,是因为总想一口吃成一个胖子,给自己定了一个不切实际的目标,所以更容易放弃。大概过了一个月左右,辅导员通知我说:我得了全校唯一的省级一等奖,并且入围了全国赛。从此,我的编程之路也算是开始了。最初大部分题目都是看不懂的,不过没关系,先把看得懂的题目完全掌握,看不懂的题目就只能死记硬背了。好好刷刷题应该可以。记得我在读大三的时候,由于经常逃课打游戏,导致挂科无数,眼看就无法毕业了。光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在线学习
算法
难
不
难
?
对程序员来讲,
算法
可以看作是内功。即使是需要学习许多的招式,但如果没有掌握那些万变不离其宗的的
算法
和理论,也只是懂得一些花拳绣腿而已,并不能在程序员的道路上走得更远。随着互联网技术和IT培训的发展,越来越多的人选择在线学习
算法
,来提高自己的专业能力。因此,不免有人也提出来了这样的担忧:在线学习
算法
难
不
难
?其实只要找到一个优质的课程内容,自身也愿意努力学习,
算法
的学习过程并不困
难
。1、为什么要学习
算法
?在学习
算法
之前,我们首先要明白学习
算法
的意义。程序员每天写代码,很少会跟
算法
直接打交道,甚至根本不需要用到什
关于
算法
,那些你不
知道
的事
关于
算法
,那些你不
知道
的事1.
算法
,不止于刷题提到
算法
,不管是科班出身还是半路出家的程序员可能都会说上几句,
算法
谁没学过谁不
知道
啊?对于走工业界路线而非学术路线的同学来说,
算法
学习的最大作用也许是找工作…… 毕竟工作后,绝大多数时候都用各种成熟的类库,少有自己实现高级数据结构和
算法
的时候。但刚结束一学期修的
算法
课,上得我还真跟没学过
算法
似的,让我大开眼界,虽然每次课上我都听的不是很懂,但每节都期盼着
java学起来
难
不
难
?
同学们问的最多的一个关于Java的问题就是java学起来到底
难
不
难
?java好不好学?小千综合过去毕业学员给大家介绍一下学Java到底
难
不
难
。 java语言 单单来说学Java这件事的话,小千认为是
不
难
的,实际上Java经常会用到的代码结构无非就是顺序结构,选择(条件)结构,循环结构这几种,后面的
算法
都是在这几种结构上面发展出来的。 所以对于Java入门来说还是
不
难
的,这也是为什么现在初级Java程序员数量这么多的原因,中级程序员也相对来说
不
难
,初级程序员混个几年有了比较多的项目经验自然就成为中级开发者,
贪心并
不
难
,
难
的是证明。
光
知道
贪心,贪心为什么可以得到最优解,你证明过么?的最优解,那么我们先假设存在一个最优解。,可以通过上述证明过程后,使之变成相同。,而且二者贪心后的分组数是相同的,子问题的最优解就是全局最优解。贪心并
不
难
,
难
的是证明。
数据结构与算法
33,025
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章