4、数学计算路
【问题描述】
五一期间,小明在外出游玩时经过了一条有趣的数学计算路,如下图所示。这条数学计算路以A为起点,D为终点,中间有B、C二个数字分岔路口。规定从A出发,顺次经过每个数字分岔路口,选择+、-、*、/ 四种运算符之一进行运算,当到达目的地D时,要求运算结果恰好等于E,现在请你帮助小明将所有符合上述条件的道路全部找出来。
a (+/-/×/÷) b (+/-/×/÷) c (+/-/×/÷) d = e
【输入】
输入文件只有一行,是5个用空格隔开的数,表示A、B、C、D和E的值(其中A、B、C、D都是1~9的数字,E是正整数)。
【输出】
输出文件只有一行,有一个整数,表示符合条件的道路的总数。
【输入输出样例】
in:1 2 3 4 10
out:2
【样例说明】
样例中输出结果2表示总共有((1+2)+3)+4=10和((1*2)*3)+4=10二种符合条件的方案。
我的代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a , b , c , d , e , ans;
int fh (int x , int y , int t)
{
if (t == 1)//加
return x + y;
else if (t == 2)//减
return x - y;
else if (t == 3)//乘
return x * y;
else if (t == 4 && x % y ==0 && y != 0)//除
return x / y;
}
signed main ()
{
cin >> a >> b >> c >> d >> e;
for (int i = 1; i <= 4; i ++) //枚举ab之间的符号
for (int j = 1; j <= 4; j ++) //枚举bc之间的符号
for (int k = 1; k <= 4; k ++) //枚举cd之间的符号
if(fh (d , fh (c , fh (a , b , i) , j) , k) == e) //计算
ans ++; //统计
cout << ans;
return 0;
}