24点

来源:互联网 发布:dm是什么软件 编辑:程序博客网 时间:2024/04/28 21:43
#include <iostream>
#include <string>
#include <time.h>
using namespace std;
//穷举法
//1、 无括号的简单表达式。
//2、 有一个括号的简单表达式。
//3、 有两个括号的复杂表达式。
int number=0;
string sss[5000];
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)) putout1(c,p);
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)) putout2(c,p);
        }
}
void disorder(float a[],string c[])
{
     float b[5];
     string d[5];
     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<<"游戏开始"<<endl;
cout<<"四个随机数为:"<<endl;
srand((unsigned)time(NULL)); //随机数生成
    float a[5];
    int i,j;
    string c[5];
    for(i=1;i<=4;i++)
{
a[i]=rand()%13+1;
cout<<a[i]<<" ";
if(a[i]==10)c[i]="10";
else c[i]=int(a[i])+'0';
}
cout<<endl;
cout<<"公式为:"<<endl;
disorder(a,c);
int v=1,u=0;
    for(i=1;i<=number;i++)
    {
v=1;for(j=1;j<i;j++)
if(sss[i]==sss[j])v=0;
if(v==1)
{
cout<<sss[i]<<endl;
u=1;
}
}
if(u==0)
cout<<"失败"<<endl;
system("pause");
    return 0;
}
0 0