做的方法有点low,还是通过列举的方式求出全部的输出样式。
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int calcu(int x, int y, int z, int w);
int jud, flag;
int main()
{
int a[4];
printf("少侠!请输入4个数~\n");
while(scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3])!=EOF)
{
flag=0,jud=0;//flag用于判断所输入的四个数是否满足规则,jud用于判断是否达到退出条件
for(int i=0; i<4; i++)
{
if (a[i]<1||a[i]>9)
{
printf("你输的数不符合游戏规则哦-。-\n");
flag=1;
break;
}
}
if(flag)
continue;
sort(a,a+4);//使用全排列前进行排序
do//全排列
{
calcu(a[0],a[1],a[2],a[3]);
}while(next_permutation(a,a+4)&&(!jud));
if(!jud)//没有方法可以组成24
printf("%d %d %d %d不可以组成24\n",a[0],a[1],a[2],a[3]);
}
return 0;
}
int calcu(int x, int y, int z, int w) //枚举出运算表达式的所有情况
{
if (x+y+z+w==24)
{
jud=1;
printf("%d+%d+%d+%d=24\n",x,y,z,w);
return 0;
}
else if (x+y+z-w==24)
{
jud=1;
printf("%d+%d+%d-%d=24\n",x,y,z,w);
return 0;
}
else if ((x+y)*(z+w)==24)
{
jud=1;
printf("(%d+%d)*(%d+%d)=24\n",x,y,z,w);
return 0;
}
else if ((x-y)*(z+w)==24)
{
jud=1;
printf("(%d-%d)*(%d+%d)=24\n",x,y,z,w);
return 0;
}
else if ((x-y)*(z-w)==24)
{
jud=1;
printf("(%d-%d)*(%d-%d)=24\n",x,y,z,w);
return 0;
}
else if ((x+y+z)*w==24)
{
jud=1;
printf("(%d+%d+%d)*%d=24\n",x,y,z,w);
return 0;
}
else if ((x-y-z)*w==24)
{
jud=1;
printf("(%d-%d-%d)*%d=24\n",x,y,z,w);
return 0;
}
else if ((x+y-z)*w==24)
{
jud=1;
printf("(%d+%d-%d)*%d=24\n",x,y,z,w);
return 0;
}
else if ((x*y*z)/w==24)
{
jud=1;
printf("(%d*%d*%d)/%d=24\n",x,y,z,w);
return 0;
}
else if ((x*y)*(z+w)==24)
{
jud=1;
printf("(%d*%d)*(%d+%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)*(z-w)==24)
{
jud=1;
printf("(%d*%d)*(%d-%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)*z-w==24)
{
jud=1;
printf("(%d*%d)*(%d)-%d=24\n",x,y,z,w);
return 0;
}
else if ((x*y)*z+w==24)
{
jud=1;
printf("(%d*%d)*(%d)+%d=24\n",x,y,z,w);
return 0;
}
else if (x*y*z*w==24)
{
jud=1;
printf("%d*%d*%d*%d=24\n",x,y,z,w);
return 0;
}
else if ((x+y)+(z/w)==24)
{
jud=1;
printf("(%d+%d)+(%d/%d)=24\n",x,y,z,w);
return 0;
}
else if ((x+y)*(z/w)==24)
{
jud=1;
printf("(%d+%d)*(%d/%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)+z+w==24)
{
jud=1;
printf("(%d*%d)+%d+%d=24\n",x,y,z,w);
return 0;
}
else if ((x*y)+z-w==24)
{
jud=1;
printf("(%d*%d)+%d-%d=24\n",x,y,z,w);
return 0;
}
else if ((x*y)-(z/w)==24)
{
jud=1;
printf("(%d*%d)-(%d/%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)+(z/w)==24)
{
jud=1;
printf("(%d*%d)-(%d/%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)-z-w==24)
{
jud=1;
printf("(%d*%d)-%d-%d=24\n",x,y,z,w);
return 0;
}
else if ((x*y)+(z*w)==24)
{
jud=1;
printf("(%d*%d)+(%d*%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)-(z*w)==24)
{
jud=1;
printf("(%d*%d)-(%d*%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)/(z*w)==24)
{
jud=1;
printf("(%d*%d)/(%d*%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)/(z-w)==24)
{
jud=1;
printf("(%d*%d)/(%d-%d)=24\n",x,y,z,w);
return 0;
}
else if ((x*y)/(z+w)==24)
{
jud=1;
printf("(%d*%d)/(%d+%d)=24\n",x,y,z,w);
return 0;
}
return 0;
}