Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
125720 mairuisheng 快算24点 C++ 解答错误 20 0 MS 248 KB 1485 2024-01-23 21:49:11

Tests(2/10):


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


测评信息: