@[24点游戏]在这里插入代码片
#include
#include
#include
using namespace std;
bool list_24(int,int,int,int);
int cal(int,int,int,int,int,int,int);
char m[4]={’+’,’-’,’*’,’/’};
string p[4];
void main(){
int a[4];
string s;
string word;
int i=0;
getline(cin,s);
istringstream is(s);
while(is>>word)
{
if(word==“joker”||word==“JOKER”)
{
cout<<“ERROR”;
break;
}
else if(word==“J”)
a[i]=11;
else if(word=="Q")
a[i]=12;
else if(word=="K")
a[i]=13;
else if(word=="A")
a[i]=1;
else
a[i]=atoi(word.c_str());
p[i]=word;
i++;
}
list_24(a[0],a[1],a[2],a[3]);
if(list_24(a[0],a[1],a[2],a[3])==false){
cout<<“您输入值无法得到24!”;
}
}
int cal(int a,int b,int c,int d,int i,int j,int k)
{
int sum=0;
if(i0)
sum=a+b;
else if(i1)
sum=a-b;
else if(i2)
sum=a*b;
else if(i3)
{
if(a%b0)
sum=a/b;
else
return 0;
}
if(j0)
sum+=c;
else if(j1)
sum-=c;
else if(j2)
sum*=c;
else if(j3)
{
if(sum%c0)
sum/=c;
else
return 0;
}
if(k0)
sum+=d;
else if(k1)
sum-=d;
else if(k2)
sum*=d;
else if(k3)
{
if(sum%d==0)
sum/=d;
else
return 0;
}
return sum;
}
bool list_24(int a,int b,int c,int d){
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
{
if(cal(a,b,c,d,i,j,k)==24)
{
cout<<p[0]<<m[i]<<p[1]<<m[j]<<p[2]<<m[k]<<p[3]<<endl;
return true;
}
else if(cal(a,b,d,c,i,j,k)==24)
{
cout<<p[0]<<m[i]<<p[1]<<m[j]<<p[3]<<m[k]<<p[2]<<endl;
return true;
}
else if(cal(a,c,b,d,i,j,k)==24)
{
cout<<p[0]<<m[i]<<p[2]<<m[j]<<p[1]<<m[k]<<p[3]<<endl;
return true;
}
else if(cal(a,c,d,b,i,j,k)==24)
{
cout<<p[0]<<m[i]<<p[2]<<m[j]<<p[3]<<m[k]<<p[1]<<endl;
return true;
}
else if(cal(a,d,b,c,i,j,k)==24)
{
cout<<p[0]<<m[i]<<p[3]<<m[j]<<p[1]<<m[k]<<p[2]<<endl;
return true;
}
else if(cal(a,d,c,b,i,j,k)==24)
{
cout<<p[0]<<m[i]<<p[3]<<m[j]<<p[2]<<m[k]<<p[1]<<endl;
return true;
}
else if(cal(b,a,c,d,i,j,k)==24)
{
cout<<p[1]<<m[i]<<p[0]<<m[j]<<p[2]<<m[k]<<p[3]<<endl;
return true;
}
else if(cal(b,a,d,c,i,j,k)==24)
{
cout<<p[1]<<m[i]<<p[0]<<m[j]<<p[3]<<m[k]<<p[2]<<endl;
return true;
}
else if(cal(b,c,a,d,i,j,k)==24)
{
cout<<p[1]<<m[i]<<p[2]<<m[j]<<p[0]<<m[k]<<p[3]<<endl;
return true;
}
else if(cal(b,c,d,a,i,j,k)==24)
{
cout<<p[1]<<m[i]<<p[2]<<m[j]<<p[3]<<m[k]<<p[0]<<endl;
return true;
}
else if(cal(b,d,a,c,i,j,k)==24)
{
cout<<p[1]<<m[i]<<p[3]<<m[j]<<p[0]<<m[k]<<p[2]<<endl;
return true;
}
else if(cal(b,d,c,a,i,j,k)==24)
{
cout<<p[1]<<m[i]<<p[3]<<m[j]<<p[2]<<m[k]<<p[0]<<endl;
return true;
}
else if(cal(c,a,b,d,i,j,k)==24)
{
cout<<p[2]<<m[i]<<p[0]<<m[j]<<p[1]<<m[k]<<p[3]<<endl;
return true;
}
else if(cal(c,a,d,b,i,j,k)==24)
{
cout<<p[2]<<m[i]<<p[0]<<m[j]<<p[3]<<m[k]<<p[1]<<endl;
return true;
}
else if(cal(c,b,a,d,i,j,k)==24)
{
cout<<p[2]<<m[i]<<p[1]<<m[j]<<p[0]<<m[k]<<p[3]<<endl;
return true;
}
else if(cal(c,b,d,a,i,j,k)==24)
{
cout<<p[2]<<m[i]<<p[1]<<m[j]<<p[3]<<m[k]<<p[0]<<endl;
return true;
}
else if(cal(c,d,a,b,i,j,k)==24)
{
cout<<p[2]<<m[i]<<p[3]<<m[j]<<p[0]<<m[k]<<p[1]<<endl;
}
else if(cal(c,d,b,a,i,j,k)==24)
{
cout<<p[2]<<m[i]<<p[3]<<m[j]<<p[1]<<m[k]<<p[0]<<endl;
return true;
}
else if(cal(d,a,b,c,i,j,k)==24)
{
cout<<p[3]<<m[i]<<p[0]<<m[j]<<p[1]<<m[k]<<p[2]<<endl;
return true;
}
else if(cal(d,a,c,b,i,j,k)==24)
{
cout<<p[3]<<m[i]<<p[0]<<m[j]<<p[2]<<m[k]<<p[1]<<endl;
return true;
}
else if(cal(d,b,a,c,i,j,k)==24)
{
cout<<p[3]<<m[i]<<p[1]<<m[j]<<p[0]<<m[k]<<p[2]<<endl;
return true;
}
else if(cal(d,b,c,a,i,j,k)==24)
{
cout<<p[3]<<m[i]<<p[1]<<m[j]<<p[2]<<m[k]<<p[0]<<endl;
return true;
}
else if(cal(d,c,a,b,i,j,k)==24)
{
cout<<p[3]<<m[i]<<p[2]<<m[j]<<p[0]<<m[k]<<p[1]<<endl;
return true;
}
else if(cal(d,c,b,a,i,j,k)==24)
{
cout<<p[3]<<m[i]<<p[2]<<m[j]<<p[1]<<m[k]<<p[0]<<endl;
return true;
}
}
return false;
}
基本思想:
运用穷举法的方法进行列举各种表达式。即通过改变纸牌参数的顺序来避免括号的使用。
运行结果: