24点游戏C语言代码及报告.docx
24点游戏C语言代码及报告24点游戏 一,问题分析 二十四点游戏规则: 给出4个数字,所给数字均为有理数,用加、减、乘、除把给出的数算成24每个数必须用一次且只能用一次,先算出结果者获胜。 步骤:比如下面的例子: 例:3、8、8、9, 答案1:×8×3 答案2: 3×8 ÷ 答案3:×3 利用3×824、4×624求解 我的主要想法是 首先穷举的可行性问题。我把表达式如下分成三类 1、 无括号的简单表达式。 2、 有一个括号的简单表达式。 3、 有两个括号的较复4、 杂表达式。 穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列 二,源程序及注释 /首先穷举的可行性问题。我把表达式如下分成三类 /1、 无括号的简单表达式。 /2、 有一个括号的简单表达式。 /3、 有两个括号的较复4、 杂表达式。 /穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列 #include <iostream> #include <string> using namespace std; int number=0; string sss5000; float cal(float a,float b,int p) switch(p) case 1:return a+b; case 2:return a-b; case 3:return a*b; case 4:return a/b; case 5:return b-a; case 6:return b/a; string link(string a,string b,int p) string st=a; switch(p) case 1:st+=("+"+b);break; case 2:st+=("-"+b);break; case 3:st+=("*"+b);break; case 4:st+=("/"+b);break; case 5:st=b+"-"+st;break; case 6:st=b+"/"+st;break; st="("+st+")" return st; void putout1(string c,int p) string st; st=link(c1,c2,p1); st=link(st,c3,p2); st=link(st,c4,p3); st=st.erase(0,1); st=st.erase(st.length-1,1); number+; sssnumber=st; void putout2(string c,int p) string st1,st2,st; st1=link(c1,c2,p1); st2=link(c3,c4,p3); st=link(st1,st2,p2); st=st.erase(0,1); st=st.erase(st.length-1,1); number+; sssnumber=st; void suan(float a,string c) int p4;int i;float sum,sum1,sum2; for(p1=1;p1<=6;p1+) for(p2=1;p2<=6;p2+) for(p3=1;p3<=6;p3+) sum=cal(a1,a2,p1); sum=cal(sum,a3,p2); sum=cal(sum,a4,p3); if(sum-24>=0&&sum-24<1e-5)|(sum-24<=0&&sum-24>-1e-5) putout1(c,p); sum1=cal(a1,a2,p1); sum2=cal(a3,a4,p3); sum=cal(sum1,sum2,p2); if(sum-24>=0&&sum-24<1e-5)|(sum-24<=0&&sum-24>-1e-5) putout2(c,p); void disorder(float a,string c) float b5; string d5; int i,j,k,l; for(i=1;i<=4;i+) for(j=1;j<=4;j+) if(j=i)continue; for(k=1;k<=4;k+) if(k=i|k=j)continue; for(l=1;l<=4;l+) if(l=i|l=j|l=k)continue; b1=ai;b2=aj;b3=ak;b4=al; d1=ci;d2=cj;d3=ck;d4=cl; suan(b,d); int main cout<<"请输入四个数字" float a5; int i,j; string c5; for(i=1;i<=4;i+)cin>>ai;if(ai=10)ci="10" ci=int(ai)+'0' disorder(a,c); int v=1,u=0; for(i=1;i<=number;i+) v=1;for(j=1;j<i;j+)if(sssi=sssj)v=0; if(v=1)cout<<sssi<<endl;u=1; if(u=0)cout<<"无解"<<endl; system("pause"); return 0; 三,运行结果显示 ;else 四,调试和运行程序过程中产生的问题及采取的措施: