摘要:# 描述# 给出一个字符串,2[a]3[c] 或者 3[d2[cb]] 输出# aaccc, 和 dcbcbdcbcbdcbcb # 说明:面试题# 采用两个栈来处理# 1.第一个栈存入字符串,然后第一个栈出栈,如果判断"[",则把第二个栈元素出栈,直到碰到']'# 2.出栈的所有元素存在一个临时变量中,这时候出栈第一个栈的栈顶(这时肯定是个数字,不是数字也可以,这里假设为是数字)# 3.根...
阅读全文
随笔分类 - 算法
摘要:给定一个字符串如:2/(3+4))*(3-1)+6-8 ,用程序解析出来,输出最终的值。这是个AST 语法解析问题,最直观的是建立一颗语法树,然后遍历语法树来获得最终的效果。如下图,建立这么一个语法树,然后广度优先搜索,进行操作就能得到最终的结果。 但是,其实我们有更方便的方法去做,不用建立语法树,
阅读全文
摘要:链接: http://note.youdao.com/noteshare?id=aeb1c7a30c5f4b70e3fff51f28ee5c47 懒得复制到这里了,一开始是在有道云笔记上写的,这里的公式支持又不太好,于是直接给出我有道云笔记的总结链接好了。
阅读全文
摘要:#includeusing namespace std;int BaseTrans(int data,int B){ int s; if(data==0) return 0; //结束递归算法 s=data%B; BaseTrans(data/B,B); cout<<s<<" ";}int main(){ int data=15, B=2;//指定要转换成的数 BaseTrans(data,B); return 0;}View Code
阅读全文
摘要:A=a1+b1*X+c1*X^2+d1*X^3+...B=a2+b2*X+c2*X^2+d2*X^3+...C=(a1+a2)+(b1+b2)*X+(c1+c2)*X^2+(d1+d2)*X^3+... 1 typedef int datatype; 2 3 typedef struct node...
阅读全文
摘要:改用尾指针表示单循环链表,寻找头指针和尾指针很方便,快速。如果用头指针记录循环链表,寻找时间为Q(n)如果用尾指针记录循环链表,寻找头指针rear->next->next,查找时间Q(1) 1 typedef int datetype; 2 typedef struct node{ 3 datetype data; 4 struct node *next; 5 } linklist; 6 linklist *head,*p; 7 8 linklist *CONNECT(linklist *ra,linklist *rb){ 9 linklist *p;10 p...
阅读全文
摘要:View Code #include "iostream"#include "cstring"using namespace std;char *output(int n,int m){ char ch[]="0123456789ABCDEF"; char *tmp=new char[100]; char *result=NULL; memset(tmp,0,100); int i=0,j; while(n) { tmp[i]=ch[n%m]; n/=m; i++;...
阅读全文
摘要:一. 特征:确定性算法的每一个计算步骤都是确定的,而随机算法允许算法在执行过程中随机地选择下一个计算步骤。在很多情况下,当算法在执行过程中面临一个选择时,随机性选择常比最优选择省时。因此随机算法可在很大程度上降低算法度。拉斯维加斯算法不会得到不正确的解,但是有时找不到解。求得正确解的概率也依赖于算法所用的时间。蒙特卡罗算法可求问题的精确解,但这个解不一定是正确的,求得正确解的概率也依赖于算法所用的时间。二.原理A.拉斯维加斯算法通常采用bool型方法来表示拉斯维加斯算法。当算法找到一个解时返回true,否则false.当返回false时,说明未得到解,那么可再次独立调用该算法,在时间允许的情况
阅读全文
摘要:View Code #include<iostream>using namespace std;#define MAXN 100int num;void print(int *a,int n){ int i; cout<<num++<<": "; for(int i=0;i<n-1;i++) cout<<a[i]<<' '; cout<<a[n-1]<<endl;}void P(int *a,int n,int m,int lev,int *temp,int *tag)
阅读全文
摘要:设有由n个不相等的整数组成的数列,记为:a(1),a(2),....,a(n)且a(i)!=a(j) (i!=j)若存在i1,i2,i3,....,ik 且有a(i1)<a(i2)<...<a(ik),则称为长度为k的不下降序列。如 3,18,7,14,10,12,23,41,16,24则它的最长子序列为 3,7,10,12,16,24或3,7,10,12,23,41都是长度为6的最长不下降序列以下是从a[n]往前算的算法:View Code View Code #include<iostream>using namespace std;int main(){ i
阅读全文
摘要:View Code /*从{1,2,...,n}中求m个元素的组合全体为集合C。设a1,a2...am属于C,不妨设a1<a2<...<am。此时,i<=ai<=n-m+i, i=1,2,3,...m.令j=max{i|ai<n-m+i+1}.那么a1a2a3...am的下一组和为a1a2...a(j-1) (aj+1)(aj+2)...(aj+m-j)*/#include<iostream>using namespace std;void print(int *a,int m){//打印 int i; for(i=0;i<m-1;i++)
阅读全文

浙公网安备 33010602011771号