flyertea 万豪:1 2 3 4=5用加减乘除四则运算符号及括号填入下式,使等式成立。

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 20:46:37
我提出的问题是很重要的,希望各位哥哥姐姐们能帮我回答啊!

(1+2)÷3+4=5

编程求全部解,如下:
#include <stdio.h>
#include <math.h>
#include <string>

using namespace std;

int num[5] = {1,2,3,4,5};
char op[4] = {'+','-','*','/'};
char *pri[5] = {"123","132","213","231","321"};

double compute(double num1, char op, double num2)
{
switch (op)
{
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num1 / num2;
}
return 0;
}

int main()
{
int i, j, k, p;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
for (k = 0; k < 4; k++)
for (p = 0; p < 5; p++)
{
switch (p)
{
case 0:
if (fabs(compute(compute(compute(num[0],op[i],num[1]), op[j], num[2]), op[k], num[3]) - num[4]) <= 1e-5)
printf("%d %d %d %d\n", i, j, k, p);
break;
case 1:
if (fabs(compute(compute(num[0],op[i],num[1]), op[j], compute(num[2], op[k], num[3])) - num[4]) <= 1e-5)
printf("%d %d %d %d\n", i, j, k, p);
break;
case 2:
if (fabs(compute(compute(num[0],op[i],compute(num[1], op[j], num[2])), op[k], num[3]) - num[4]) <= 1e-5)
printf("%d %d %d %d\n", i, j, k, p);
break;
case 3:
if (fabs(compute(num[0],op[i],compute(compute(num[1], op[j], num[2]), op[k], num[3])) - num[4]) <= 1e-5)
printf("%d %d %d %d\n", i, j, k, p);
break;
case 4:
if (fabs(compute(num[0],op[i],compute(num[1], op[j], compute(num[2], op[k], num[3]))) - num[4]) <= 1e-5)
printf("%d %d %d %d\n", i, j, k, p);
break;
}
}
return 0;
}

运行结果:
0 2 1 0
0 3 0 0
1 1 2 3

对应的所有解为:
(1+2)*3-4=5
(1+2)/3+4=5
1-(2-3)*4=5

(3*4)/2-1=5

-1*(2-3)+4=5

(3-2)×1+4=5