题目描述
注意:浮点数相等不能用 == 判断,要看两数差的绝对值是否足够小
程序代码
#include <iostream>
#include <cmath>
using namespace std;
double a[5]; //存放四个数;
# define EPS 1e-6
bool isZero(double x) {
return fabs(x) <= EPS;
}
bool count24(double a[], int n) {
if (n == 1) {
if (isZero(a[0] - 24))
return true;
else
return false;
}
double b[5]; //存放临时结果
for (int i = 0; i < n - 1; ++i)
for (int j = i + 1; j < n; ++j) { //枚举两个数组合
int m = 0;
for (int k = 0; k < n; ++k)
if (k != i && k != j)
b[m++] = a[k]; //把其余数放入b
b[m] = a[i] + a[j];
if(count24(b,m+1)) //与剩余的数递归计算
return true;
b[m] = a[i] - a[j];
if (count24(b, m + 1))
return true;
b[m] = a[j] - a[i];
if (count24(b, m + 1))
return true;
b[m] = a[i] * a[j];
if (count24(b, m + 1))
return true;
if (!isZero(a[j])) {
b[m] = a[i] / a[j];
if (count24(b, m + 1))
return true;
}
if (!isZero(a[i])) {
b[m] = a[j] / a[i];
if (count24(b, m + 1))
return true;
}
}
return false;
}
int main()
{
//输入4个数,调用count24(...),根据返回结果输出
}