计算24点
#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; }