代码
#include <cstdio>
#include <cmath>
#define EPS 1e-8
using namespace std
double a[4]
bool judge(double a[], int n)
{
if (n == 1){
if (fabs(a[0]-24) <= EPS) return 1
else return 0
}
double b[4]
for (int i = 0
for (int j = i+1
int rem = 0
for (int k = 0
if (k != i && k != j) b[rem++] = a[k]
b[rem] = a[i] + a[j]
if (judge(b, rem+1)) return 1
b[rem] = a[i] - a[j]
if (judge(b, rem+1)) return 1
b[rem] = a[j] - a[i]
if (judge(b, rem+1)) return 1
b[rem] = a[i] * a[j]
if (judge(b, rem+1)) return 1
if (fabs(a[j]) > EPS){
b[rem] = a[i] / a[j]
if (judge(b, rem+1)) return 1
}
if (fabs(a[i]) > EPS){
b[rem] = a[j] / a[i]
if (judge(b, rem+1)) return 1
}
}
return 0
}
int main()
{
while(~scanf("%lf%lf%lf%lf", &a[0], &a[1], &a[2], &a[3]) &&
(a[0] || a[1] || a[2] || a[3]))
judge(a, 4) ? printf("YES\n"): printf("NO\n")
return 0
}
说明
- 输入四个数,输出是否能算出24
- 允许出现分数/负数
- 比较浮点数是否相等不能用
==