本24点代码可以实现以下操作:
- 查找4个数经过 + + +, − - −, ∗ * ∗, \ 和 ( ) () () ,运算是否可得到 N N N;
- 支持仅查找是否存在和查找存在的算式
- 支持多组数据,每组数据结束后请按回车,当 N = 0 N=0 N=0时结束
- 输入
- 第一行一个二进制数g,0表示不输出算式,1相反;(输入后过程中不可更改)
- 接下来一行一个数 N N N
- 然后下一行4个数,表示这些数参加运算
- 以回车表示下一组数据(回到第2步)
#include<bits/stdc++.h>
#define forr(i) for(int i=1;i<=4;i++)
using namespace std;
char a_c[100],b_c[100],c_c[100],d_c[100];
int a,b,c,d,a1,b1,c1,d1,N,num[4]={1,2,3,4};
bool ans;
int js(int x,int y,int n) {if(n==1)return x+y;if(n==2)return x-y;if(n==3)return x*y;if(n==4&&y!=0&&x%y==0)return x/y;return -10000000+rand();}
char w(int i){if(i==1)return '+';if(i==2)return '-';if(i==3)return '*';return '\\'; }
int g(char o[]){int x=0;for(int i=0;i<strlen(o);i++)x*=10,x+=o[i]-'0';return x;}
void comp(int &a,int &b){if(a>b)a^=b,b^=a,a^=b;return;}
void csh(){
if(a_c[0]=='A')a=1;else if(a_c[0]=='J')a=11;else if(a_c[0]=='Q')a=12;else if(a_c[0]=='K')a=13;else a=g(a_c);
if(b_c[0]=='A')b=1;else if(b_c[0]=='J')b=11;else if(b_c[0]=='Q')b=12;else if(b_c[0]=='K')b=13;else b=g(b_c);
if(c_c[0]=='A')c=1;else if(c_c[0]=='J')c=11;else if(c_c[0]=='Q')c=12;else if(c_c[0]=='K')c=13;else c=g(c_c);
if(d_c[0]=='A')d=1;else if(d_c[0]=='J')d=11;else if(d_c[0]=='Q')d=12;else if(d_c[0]=='K')d=13;else d=g(d_c);
comp(a,b),comp(a,c),comp(a,d),comp(b,c),comp(b,d),comp(c,d);
}
void csh2(){
if(num[0]==1)a1=a;if(num[0]==2)a1=b;if(num[0]==3)a1=c;if(num[0]==4)a1=d;
if(num[1]==1)b1=a;if(num[1]==2)b1=b;if(num[1]==3)b1=c;if(num[1]==4)b1=d;
if(num[2]==1)c1=a;if(num[2]==2)c1=b;if(num[2]==3)c1=c;if(num[2]==4)c1=d;
if(num[3]==1)d1=a;if(num[3]==2)d1=b;if(num[3]==3)d1=c;if(num[3]==4)d1=d;
}
int main() {
scanf("%d",&ans);getchar();
system("cls");
while(1){
scanf("%d",&N);
if(N==0)return 0;
cin>>a_c>>b_c>>c_c>>d_c;getchar();csh();num[0]=1,num[1]=2,num[2]=3,num[3]=4;
do {csh2();
forr(i) forr(j) forr(k) {
if(js(js(js(a1,b1,i),c1,j),d1,k)==N) {if(ans)printf("((%d%c%d)%c%d)%c%d=%d\n",a1,w(i),b1,w(j),c1,w(k),d1,N);else printf("Have answer!");goto start;}
if(js(js(a1,js(b1,c1,i),j),d1,k)==N) {if(ans)printf("(%d%c(%d%c%d))%c%d=%d\n",a1,w(j),b1,w(i),c1,w(k),d1,N);else printf("Have answer!");goto start;}
if(js(a1,js(js(b1,c1,i),d1,j),k)==N) {if(ans)printf("%d%c((%d%c%d)%c%d)=%d\n",a1,w(k),b1,w(i),c1,w(j),d1,N);else printf("Have answer!");goto start;}
if(js(js(a1,b1,i),js(c1,d1,j),k)==N) {if(ans)printf("(%d%c%d)%c(%d%c%d)=%d\n",a1,w(i),b1,w(k),c1,w(j),d1,N);else printf("Have answer!");goto start;}
if(js(a1,js(b1,js(c1,d1,i),j),k)==N) {if(ans)printf("%d%c(%d%c(%d%c%d))=%d\n",a1,w(k),b1,w(j),c1,w(i),d1,N);else printf("Have answer!");goto start;}
}
} while(next_permutation(num,num+4));
printf("No answer!\n");start:getchar();system("cls");
}
return 0;
}