1 / 11
文档名称:

bf算法思想解析.doc

格式:doc   大小:33KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

bf算法思想解析.doc

上传人:changjinlai 2019/8/20 文件大小:33 KB

下载得到文件列表

bf算法思想解析.doc

文档介绍

文档介绍:表达式求值#include<iostream>//输入的表达式要以'#'结尾,如‘5+6*3/(3-1)#’#include<cstring>#include<cstdio>#type>#include<stack>usingnamespacestd;stack<char>opter;//运算符栈stack<double>opval;//操作数栈intgetIndex(chartheta)//获取theta所对应的索引{intindex=0;switch(theta){case'+':index=0;break;case'-':index=1;break;case'*':index=2;break;case'/':index=3;break;case'(':index=4;break;case')':index=5;break;case'#':index=6;default:break;}returnindex;}chargetPriority(chartheta1,chartheta2)//获取theta1与theta2之间的优先级{constcharpriority[][7]=//算符间的优先级关系{{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},{'>','>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=','0'},{'>','>','>','>','0','>','>'},{'<','<','<','<','<','0','='},};intindex1=getIndex(theta1);intindex2=getIndex(theta2);returnpriority[index1][index2];}doublecalculate(doubleb,chartheta,doublea)//计算bthetaa{switch(theta){case'+':returnb+a;case'-':returnb-a;case'*':returnb*a;case'/':returnb/a;default:break;}}doublegetAnswer()//表达式求值{('#');//首先将'#'入栈opterintcounter=0;//添加变量counter表示有多少个数字相继入栈,实现多位数的四则运算charc=getchar();while(c!='#'||()!='#')//终止条件{if(isdigit(c))//如果c在'0'~'9'之间{if(counter==1)//counter==1表示上一字符也是数字,所以要合并,比如12*12,要算12,而不是单独的1和2{doublet=();();(t*10+(c-'0'));counter=1;}else{(c-'0');//将c对应的数值入栈opvalcounter++;}c=getchar();}else{counter=0;//counter置零switch(getPriority((),c))//获取运算符栈opter栈顶元素与c之间的优先级,用'>','<','='表示{case'<'://<(c);c=getchar();break;case'='://=将opter栈顶元素弹出,();c=getchar();break;case'>'://>则计算chartheta=();();doublea=();();doubleb=();();(calculate(b,theta,a));}}}();//返回opval栈顶元素的值}intmain(){//freopen("","r",stdin);intt;//需要计算的表达式的个数cin>>t;getchar();while(t--){while(!())();while(!())();doubleans=getAnswer();cout<<ans<<endl<<endl;getchar();}return0;}算法思想解析:  BF(BruteForce)算法也就是传说中的“笨办