站外题求助
  • 板块灌水区
  • 楼主be7mos
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/1 12:45
  • 上次更新2024/12/1 15:39:34
查看原帖
站外题求助
1345158
be7mos楼主2024/12/1 12:45

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;
}
2024/12/1 12:45
加载中...