无优先级运算问题
《无优先级运算问题》由会员分享,可在线阅读,更多相关《无优先级运算问题(3页珍藏版)》请在装配图网上搜索。
1、无优先级运算问题题目: 问题描述:给定n个正整数和4个运算符+,-,*,/,且运算符五优先级,如2+35=25。对于任意给定的整数m,试设计一个算法,用以上给出的n个数和4个运算符,产生整数m,且用的运算次数最少。给出的n个数中每个数最多只能用1次,但每种运算符可以任意使用 算法设计:对于给定的n个正整数,设计一个算法,用最少的无优先级运算次数产生整数m。 程序清单: #include using namespace std; int k; class readin friend int nreadin(int n,int m); private: bool found; /found判断是否
2、找到解 bool search(int t); int n,m,x; int* a; /给定的用于运算的n个正整数的存放位置 int* num; /存放运算的产生整数m int* operate; int* flag; char* ptr; /存储结果中的运算符 ; /用迭代加深的回溯法 bool readin:search(int depth) /depth:递归深度 if(depthk) if(found) return true; /判断结点是否满足条件,即是否找到解 else return false; else for(int i=0;in;i+) if(flagi=0) numde
3、pth=ai; flagi=1; for(int j=0;j4;j+) operatedepth=j; if(search(depth+1) return true; flagi=0; return false; bool readin:found int x=num0; for(int i=0;ik;i+) switch (operatei) case 0:x+=numi+1;ptri=+;break; case 1:x-=numi+1;ptri=-;break; case 2:x*=numi+1;ptri=*;break; case 3:x/=numi+1;ptri=/;break; re
4、turn(x=m); /读入初始数据 int nreadin(int n,int m) readin X; int* a=new intn; int* num=new intn; int* operate=new intn; int* flag=new intn; char* ptr=new charn; X.n=n; X.m=m; X.a=a; X.operate=operate; X.flag=flag; X.num=num; X.ptr=ptr; cout给定的用于运算的n个正整数:endl; for(int i=0;iai; flagi=0; cout给定的运算结果 整数m:endl; for(k=0;kn;k+) if(X.search(0) cout计算的产生整数m的最少无优先级运算次数:endl; coutkendl; cout计算的产生整数m的最少无优先级运算表达式:endl; for(i=0;i=k;i+) coutnumiptri; coutendl; return 0; coutNo Solution!endl; return 0; void main int n; int m; cout输入给定的用于运算的n个正整数和给定的运算结果整数m:nm; nreadin(n,m); system(pause); 运行结果:
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。