您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > (原创精品)无优先级运算问题
1/4题目:★问题描述:给定n个正整数和4个运算符+,-,*,/,且运算符五优先级,如2+3X5=25对于任意给定的整数m,试设计一个算法,用以上给出的n个数和4个运算符,产生整数m,且用的运算次数最少。给出的n个数中每个数最多只能用1次,但每种运算符可以任意使用★算法设计:对于给定的n个正整数,设计一个算法,用最少的无优先级运算次数产生整数m。程序清单:#includeiostreamusingnamespacestd;intk;classreadin{friendintnreadin(intn,intm);private:boolfound();//found判断是否找到解boolsearch(intt);intn,m,x;int*a;〃给定的用于运算的n个正整数的存放位置int*num;//存放运算的产生整数mint*operate;int*flag;2/4char*ptr;//存储结果中的运算符};//用迭代加深的回溯法boolreadin::search(intdepth)//depth:递归深度{if(depthk){if(found())returntrue;//判断结点是否满足条件,即是否找到解elsereturnfalse;}elsefor(inti=0;in;i++)if(flag[i]==0){num[depth]=a[i];flag[i]=1;for(intj=0;j4;j++){operate[depth]=j;if(search(depth+1))returntrue;}flag[i]=0;}returnfalse;}boolreadin::found(){intx=num[0];for(inti=0;ik;i++){switch(operate[i]){case0:x+=num[i+1];ptr[i]='+';break;case1:x-=num[i+1];ptr[i]='-';break;case2:x*=num[i+1];ptr[i]='*';break;case3:x/=num[i+1];ptr[i]='/';break;}}return(x==m);}//读入初始数据intnreadin(intn,intm){readinX;int*a=newint[n];int*num=newint[n];int*operate=newint[n];int*flag=newint[n];3/4char*ptr=newchar[n];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(inti=0;in;i++){cina[i];flag[i]=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++){coutnum[i]ptr[i];}coutendl;return0;}coutNoSolution!endl;return0;}voidmain(){intn;intm;4/4cout输入给定的用于运算的n个正整数和给定的运算结果整数endl;cinnm;nreadin(n,m);system(pause);}运行结果:m:
本文标题:(原创精品)无优先级运算问题
链接地址:https://www.777doc.com/doc-7278186 .html