#include <iostream> #include <string> using namespace std; int main() { float cal_model1(float a,float b,float c, float d,int op1,int op2,int op3); float cal_model2(float a,float b,float c, float d,int op1,int op2,int op3); string str[4]; int i; float poker[4]; /*输入过程*/ for (i=0; i<=3; i++) cin>>str[i]; for (i=0; i<=3; i++) { if (str[i]=="A") poker[i]=1; if (str[i]=="2") poker[i]=2; if (str[i]=="3") poker[i]=3; if (str[i]=="4") poker[i]=4; if (str[i]=="5") poker[i]=5; if (str[i]=="6") poker[i]=6; if (str[i]=="7") poker[i]=7; if (str[i]=="8") poker[i]=8; if (str[i]=="9") poker[i]=9; if (str[i]=="10") poker[i]=10; if (str[i]=="J") poker[i]=11; if (str[i]=="Q") poker[i]=12; if (str[i]=="K") poker[i]=13; } /********************************华丽分割线*******************************/ int op1; int op2; int op3; int flag=0; int j; int k; int l; /*对得到的的四个数全排列*/ for (i=0; i<=3; i++) for (j=0; j<=3; j++) if (i!=j) for (k=0; k<=3; k++) if (k!=i && k!=j ) for (l=0; l<=3; l++) if (l!=i && l!=j && l!=k) { //穷举运算符 for(op1=1; op1<=4; op1++) for(op2=1; op2<=4; op2++) for(op3=1; op3<=4; op3++) { if (24 == cal_model1(poker[i],poker[j],poker[k],poker[l],op1,op2,op3)) flag=1; if (24 == cal_model2(poker[i],poker[j],poker[k],poker[l],op1,op2,op3)) flag=1; } } if (flag==1) cout<<"Y"; else cout<<"N"; return 0; } float cal(float x, float y,int op) { switch(op) { case 1:return x+y; case 2:return x-y; case 3:return x*y; case 4:return x/y; } } /*把括号分为了(A@B)@(C@D)和 ((A@B)@C)@D两种情况,@代表运算符,然后运算符穷举*/ float cal_model1(float a,float b,float c, float d,int op1,int op2,int op3) { float r1; float r2; float r3; r1=cal(a,b,op1); r2=cal(r1,c,op2); r3=cal(r2,d,op3); return r3; } float cal_model2(float a,float b,float c, float d,int op1,int op2,int op3) { float r1; float r2; float r3; r1=cal(a,b,op2); r2=cal(c,d,op1); r3=cal(r1,r2,op3); return r3; }