本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; }