帮帮忙吧,那位编程高手会做这道题啊?考试呀

来源:百度知道 编辑:UC知道 时间:2024/06/22 17:53:48
Description

给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。

这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。

比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。

Input

输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。

Output

对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。

Sample Input

5 5 5 1
1 1 4 2
0 0 0 0

Sample Output

YES
NO

Hint

用递归实现!
这位高手啊,运行不了啊?为什么?有C的吗?多谢啦

这儿有两个,是C++的,看你是要C++的吗还是要C的:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>

using namespace std;

const double precision = 1e-6;
const int count_of_number = 4;
const int number_to_be_cal = 24;

double number[count_of_number];
string expression[count_of_number];

bool search(int n)
{
if (n == 1) {
if ( fabs(number[0] - number_to_be_cal) < precision ) {
cout << expression[0] <<"="<<number_to_be_cal<< endl;
return false;
} else {
return false;
}
}