点游戏c语言代码及报告.pdf
点游戏 c 语言代码及报告 Prepared on 22 November 202024 点游戏一,问题分析二十四点游戏规则:给出 4个数字,所给数字均为有理数,用加、减、乘、除(可加括号)把给出的数算成 24每个数必须用一次且只能用一次,先算出结果者获胜。步骤:比如下面的例子:例:3、8、8、9,答案 1:(98)83答案 2:38(98)答案 3:(988)3利用 3824、4624求解我的主要想法是 首先穷举的可行性问题。我把表达式如下分成三类1、无括号的简单表达式。2、有一个括号的简单表达式。3、有两个括号的较复 4、杂表达式。穷举的开始我对给出的四个数进行排列,其可能的种数为 4*3*2*1=24。我利用一个嵌套函数实现四个数的排列二,源程序及注释/首先穷举的可行性问题。我把表达式如下分成三类/1、无括号的简单表达式。/2、有一个括号的简单表达式。/3、有两个括号的较复 4、杂表达式。/穷举的开始我对给出的四个数进行排列,其可能的种数为 4*3*2*1=24。我利用一个嵌套函数实现四个数的排列#include#include 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=(0,1);st=()-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=(0,1);st=()-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=0&sum-241e-5)|(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-241e-5)|(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;iai;if(ai=10)ci=10;elseci=int(ai)+0;disorder(a,c);int v=1,u=0;for(i=1;i=number;i+)v=1;for(j=1;ji;j+)if(sssi=sssj)v=0;if(v=1)coutsssiendl;u=1;if(u=0)cout无解endl;system(pause);return 0;三,运行结果显示四,调试和运行程序过程中产生的问题及采取的措施: