Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
125720 | mairuisheng | 快算24点 | C++ | 解答错误 | 20 | 0 MS | 248 KB | 1485 | 2024-01-23 21:49:11 |
#include<bits/stdc++.h> using namespace std; char op[3], o[5]="+-*/"; float n[4], on[10]; int used[4] = {0}, top=0, tp=0, x; void chk(float k); void search24(int d); float calc(float n1, float n2, char o); void make(int i, float p, float q, char o, int d); int main( void ) { scanf("%f%f%f%f", &n[0], &n[1], &n[2], &n[3]); search24(0); printf("No"); return 0; } void chk(float k) { if( (tp != 3) || ( fabs(k-24.0) > 0.000001 )) return; for(x=0; x<5; x+=2) printf("%g%c%g=%g\n", on[x+1], op[x/2], on[x], calc(on[x], on[x+1], op[x/2])); exit(0); } float calc(float n1, float n2, char o) { switch(o){ case '+': return (n2+n1); case '-': return (n1-n2); case '*': return (n2*n1); case '/': return (n1/n2); default: exit(0); } } void make(int i, float p, float q, char o, int d) { if(fabs(q)>0.000001 || o!='/') n[i] = calc(p, q, o); op[tp++] = o; chk(n[i]); search24(d+1); tp--; } void search24(int d) { int i, j, k; float p, q; if(d>=3) return; for(i=0; i<4; i++) for(j=0; j<4; j++) if( (i!=j)&& (used[i]+used[j] == 0) ) { used[j] = 1; p=n[i]; q=n[j]; on[top++] = p; on[top++] = q; for(k=0; k<4; k++) make(i, p, q, o[k], d); n[i] = p; used[j] = 0; top -= 2; } }