24点游戏C语言代码及报告
24点游戏 一,问题分析 二十四点游戏规则:
给出4个数字,所给数字均为有理数,用加、减、乘、除(可加括号)把给出的数算成24(每个数必须用一次且只能用一次,先算出结果者获胜。 步骤:比如下面的例子:
例:3、8、8、9, 答案1:(9—8)×8×3 答案2: 3×8 ?(9—8) 答案3:(9—8?8)×3 利用3×8,24、4×6,24求解
我的主要想法是 首先穷举的可行性问题。我把表达式如下分成三类—— 1、 无括号的简单表达式。
2、 有一个括号的简单表达式。 3、 有两个括号的较复4、 杂表达式。
穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列
二,源程序及注释
//首先穷举的可行性问题。我把表达式如下分成三类—— //1、 无括号的简单表达式。 //2、 有一个括号的简单表达式。 //3、 有两个括号的较复4、 杂表达式。
//穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列
#include 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(c[1],c[2],p[1]); st=link(st,c[3],p[2]); st=link(st,c[4],p[3]); st=st.erase(0,1); st=st.erase(st.length()-1,1); number++; sss[number]=st; } void putout2(string c[],int p[]) { string st1,st2,st; st1=link(c[1],c[2],p[1]); st2=link(c[3],c[4],p[3]); st=link(st1,st2,p[2]); st=st.erase(0,1); st=st.erase(st.length()-1,1); number++; sss[number]=st; } void suan(float a[],string c[]) { int p[4];int i;float sum,sum1,sum2; for(p[1]=1;p[1]<=6;p[1]++) for(p[2]=1;p[2]<=6;p[2]++) for(p[3]=1;p[3]<=6;p[3]++) { sum=cal(a[1],a[2],p[1]); sum=cal(sum,a[3],p[2]); sum=cal(sum,a[4],p[3]); if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) sum1=cal(a[1],a[2],p[1]); sum2=cal(a[3],a[4],p[3]); sum=cal(sum1,sum2,p[2]); if((sum-24>=0&&sum-24<1e-5)||(sum-24<=0&&sum-24>-1e-5)) } } void disorder(float a[],string c[]) { float b[5]; string d[5]; putout1(c,p); putout2(c,p); 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; b[1]=a[i];b[2]=a[j];b[3]=a[k];b[4]=a[l]; d[1]=c[i];d[2]=c[j];d[3]=c[k];d[4]=c[l]; suan(b,d); } } } } int main() { cout<<\"请输入四个数字\"; float a[5]; int i,j; string c[5]; for(i=1;i<=4;i++){cin>>a[i];if(a[i]==10)c[i]=\"10\" ;else c[i]=int(a[i])+'0';} disorder(a,c); int v=1,u=0; for(i=1;i<=number;i++) {v=1;for(j=1;j三,运行结果显示 四,调试和运行程序过程中产生的问题及采取的措施: 因篇幅问题不能全部显示,请点此查看更多更全内容