算24

题解:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const double ex = 1e-6; 4 double a[5]; 5 bool iseq(double a, double b) 6 { 7 return fabs(a - b) <= ex; 8 } 9 bool count24(double a[], int n) 10 { 11 if (n == 1) // 能算24 12 return iseq(a[0], 24); 13 14 double b[5] = {0}; 15 // 选择两个不同的数进行运算 16 for (int i = 0; i < n; ++i) 17 { 18 for (int j = 0; j < n; ++j) 19 { 20 if (i == j) 21 continue; 22 int m = 0; 23 for (int k = 0; k < n; ++k) 24 { // 将其余的数放到数组里 25 if (k != i && k != j) 26 b[m++] = a[k]; 27 } 28 // 把运算后的数放到数组里 29 b[m] = a[i] + a[j]; 30 if (count24(b, n - 1)) 31 return 1; 32 b[m] = a[i] - a[j]; 33 if (count24(b, n - 1)) 34 return 1; 35 b[m] = a[i] * a[j]; 36 if (count24(b, n - 1)) 37 return 1; 38 if (a[j] != 0) 39 b[m] = a[i] / a[j]; 40 if (count24(b, n - 1)) 41 return 1; 42 } 43 } 44 45 // 不能算24 46 return 0; 47 } 48 49 int main() 50 { 51 while (cin >> a[0] >> a[1] >> a[2] >> a[3] && a[0] + a[1] + a[2] + a[3] != 0) 52 { 53 if (count24(a, 4)) 54 cout << "YES" << endl; 55 else 56 cout << "NO" << endl; 57 } 58 return 0; 59 }

浙公网安备 33010602011771号