算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 }

 

posted @ 2023-07-11 23:06  上原歩夢  阅读(47)  评论(0)    收藏  举报