#include<iostream>
using namespace std;
typedef struct node
{
double bev;//数
char ser[15];//表达式
int length;//表达式长度
}Bnode;
Bnode dev_4[4];//四个数
Bnode dev_3[3];//三个数
Bnode dev_2[2];//两个数
Bnode dev_1;//一个数
char flag[4]={'+','-','/','*'};
Bnode count(Bnode d1,Bnode d2,char ch)
{
Bnode d3;//临时存放数据
d3.length=0;//初始化表达式长度
switch(ch)
{
case '+':
d3.bev=d1.bev+d2.bev;//计算数据
d3.ser[d3.length++]='(';
for(int i=0;i<=d1.length;i++)
{
d3.ser[d3.length++]=d1.ser[i];
}
d3.ser[d3.length++]='+';
for(int i=0;i<=d2.length;i++)
{
d3.ser[d3.length++]=d2.ser[i];
}
d3.ser[d3.length]=')';
break;
case '-':
d3.bev=d1.bev-d2.bev;//计算数据
d3.ser[d3.length++]='(';
for(int i=0;i<=d1.length;i++)
{
d3.ser[d3.length++]=d1.ser[i];
}
d3.ser[d3.length++]='-';
for(int i=0;i<=d2.length;i++)
{
d3.ser[d3.length++]=d2.ser[i];
}
d3.ser[d3.length]=')';
break;
case '/':
d3.bev=d1.bev/d2.bev;//计算数据
d3.ser[d3.length++]='(';
for(int i=0;i<=d1.length;i++)
{
d3.ser[d3.length++]=d1.ser[i];
}
d3.ser[d3.length++]='/';
for(int i=0;i<=d2.length;i++)
{
d3.ser[d3.length++]=d2.ser[i];
}
d3.ser[d3.length]=')';
break;
case '*':
d3.bev=d1.bev*d2.bev;//计算数据
d3.ser[d3.length++]='(';
for(int i=0;i<=d1.length;i++)
{
d3.ser[d3.length++]=d1.ser[i];
}
d3.ser[d3.length++]='*';
for(int i=0;i<=d2.length;i++)
{
d3.ser[d3.length++]=d2.ser[i];
}
d3.ser[d3.length]=')';
break;
}
return d3;
}
void fun(int dev[])
{
for(int i=0;i<4;i++)//初始化结构体数组
{
dev_4[i].bev=dev[i];
switch(dev[i])
{
case 1:dev_4[i].ser[0]='1';dev_4[i].length=0;break;
case 2:dev_4[i].ser[0]='2';dev_4[i].length=0;break;
case 3:dev_4[i].ser[0]='3';dev_4[i].length=0;break;
case 4:dev_4[i].ser[0]='4';dev_4[i].length=0;break;
case 5:dev_4[i].ser[0]='5';dev_4[i].length=0;break;
case 6:dev_4[i].ser[0]='6';dev_4[i].length=0;break;
case 7:dev_4[i].ser[0]='7';dev_4[i].length=0;break;
case 8:dev_4[i].ser[0]='8';dev_4[i].length=0;break;
case 9:dev_4[i].ser[0]='9';dev_4[i].length=0;break;
case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;
//case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;
//case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;
//case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;
//case 10:dev_4[i].ser[0]='1';dev_4[i].ser[1]='0';dev_4[i].length=1;break;
}
//dev_4[i].ser[0]=dev[i];
}
for(int i=0;i<4;i++)//从四个数中选两个数运算 i
{
for(int j=0;j<4;j++)// j
{
if(j==i) continue;//防止两个数重复
else
{
for(int n=0;n<4;n++)//加载三个数字的运算 n,选择运算符
{
dev_3[0]=count(dev_4[i],dev_4[j],flag[n]);
int mm=1;//加载辅助
for(int m=0;m<4;m++)//m,加载其他两个数
{
if(m!=i&&m!=j)
{
dev_3[mm++]=dev_4[m];
}
}
//dev_3已经加载完毕,开始三个数的计算
for(int ii=0;ii<3;ii++)//从三个数中选择两个数运算 ii
{
for(int jj=0;jj<3;jj++)
{
if(jj==ii) continue;//防止两个数重复
else
{
for(int nn=0;nn<4;nn++)
{
dev_2[0]=count(dev_3[ii],dev_3[jj],flag[nn]);
for(int m=0;m<3;m++)//m,加载剩余数
{
//int mm=1;//加载辅助
if(m!=ii&&m!=jj)
{
dev_2[1]=dev_3[m];
}
}
for(int nnn=0;nnn<4;nnn++)
{
dev_1=count(dev_2[0],dev_2[1],flag[nnn]);
if(abs(dev_1.bev-24)<=0.000001)
{
for(int s=0;s<4;s++)
cout<<dev[s]<<' ';
for(int w=0;w<=dev_1.length;w++)
{
cout<<dev_1.ser[w];
}
cout<<endl;
goto lopo;
}
if(nnn!=0&&nnn!=3)
{
dev_1=count(dev_2[1],dev_2[0],flag[nnn]);
if(abs(dev_1.bev-24)<=0.000001)
{
for(int s=0;s<4;s++)
cout<<dev[s]<<' ';
for(int w=0;w<=dev_1.length;w++)
{
cout<<dev_1.ser[w];
}
cout<<endl;
goto lopo;
}
}
}
}
}
}
}
}
}
}
}
lopo:
;
}
int main()
{
int dev[4];//四个数
for(int i=1;i<=10;i++)
{
dev[0]=i;
for(int j=i;j<=10;j++)//j=i为防止出现重复,下同n=j,m=n
{
dev[1]=j;
for(int n=j;n<=10;n++)
{
dev[2]=n;
for(int m=n;m<=10;m++)
{
dev[3]=m;
fun(dev);
}
}
}
}
//fun(dev);
//cout<<8.0/(3-8.0/3)<<endl;
system("pause");
return 0;
}