大神帮忙看看(c++30分)

P1236 算24点

```cpp #include <iostream> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; int p1[5],p2[5],p3[5]; int compute(int x,int y,int z) { switch(z) { case 1: return x+y; case 2: return abs(x-y); case 3: return xy; case 4:{ if(x && y) return -1; if(max(x,y)%min(x,y)) return -1; else return max(x,y)/min(x,y); } } } char fh(int n) { switch(n) { case 1: return '+'; case 2: return '-'; case 3: return ''; case 4: return '/'; } } void search(int a[],int remain) { if(remain==2) { for(int i=1;i<=4;i++) { if(compute(a[0],a[1],i)==24) { p1[3]=max(a[0],a[1]); p2[3]=min(a[0],a[1]); p3[3]=i; for(int j=1;j<=3;j++) { cout<<p1[j]<<fh(p3[j])<<p2[j]<<"="<<compute(p1[j],p2[j],p3[j])<<endl; } exit(0); } } return; } int b[5]={0}; for(int i=0;i<remain;i++) { for(int j=0;j<remain;j++) { if(i!=j) { for(int k=1;k<=4;k++) { int y=compute(a[i],a[j],k); if(y==-1) continue; p1[4-remain+1]=max(a[i],a[j]); p2[4-remain+1]=min(a[i],a[j]); p3[4-remain+1]=k; b[0]=y; int p=1; for(int l=0;l<remain;l++) { if(l!=i&&l!=j) { b[p++]=a[l]; } } search(b,remain-1); } } } } } int main() { int a[5]; cin>>a[0]>>a[1]>>a[2]>>a[3]; search(a,4); cout<<"No answer!"; return 0; } ```
by henrytb @ 2018-07-07 14:20:35



by 大爱无疆 @ 2019-01-18 11:14:49


#### ##1.~~~~~~**~~ _ ------------ _ ~~**~~~~~~ ------------ ####
by 大爱无疆 @ 2019-01-18 11:15:00


|