共有多少种等式
Posted 上山打老虎D
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了共有多少种等式相关的知识,希望对你有一定的参考价值。
Q:共有多少种等式?
题目描述:
有如下式子:
n
1
?
n
2
?
n
3
?
n
4
=
n
5
n_1?n_2?n_3?n_4=n_5
n1?n2?n3?n4=n5 。其中,
?
?
?代表四则运算(+,-,*,/)。对于给定的
n
1
,
n
2
,
n
3
,
n
4
n_1,n_2,n_3,n_4
n1,n2,n3,n4,请问存在多少种不同的运算符组合可以使得等式成立?例如当输入为1 2 3 4 5
时,即表示求满足
1
?
2
?
3
?
4
=
5
1?2?3?4=5
1?2?3?4=5的运算符数,易得,有
1
+
2
/
3
+
4
=
5
1+2/3+4=5
1+2/3+4=5与
1
−
2
/
3
+
4
=
5
1-2/3+4=5
1−2/3+4=5两种组合,即答案为2。
输入:
n
1
,
n
2
,
n
3
,
n
4
,
n
5
n_1,n_2,n_3,n_4,n_5
n1,n2,n3,n4,n5的值,此题有多组输入数据
输出:
满足条件的等式个数,每组数据一行。
样例输入:
1 2 3 4 5
5 4 2 3 1
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
样例输出:
2
4
20
4
4
测试输入:
2 3 4 5 6
7 8 9 10 11
3 4 5 6 7
8 9 1 1 1
2 3 6 4 9
1 2 1 2 1
2 1 1 2 3
5 6 1 2 1
测试输出:
4
0
2
5
2
10
7
4
Sample Code:
#include<stdio.h>
char ch[] = {'+', '-', '*', '/'};
char s[10];
int a[10], k[10];
int ans;
void dfs(int x) {
if (x == 4) {
for (int i = 1; i < 6; i++) {
a[i] = k[i];
}
int res = 0, t[10];
int cnt = 0;
for (int i = 1; i < 4; i++) {
if (s[i] == '*') {
a[i + 1] *= a[i];
} else if (s[i] == '/') {
a[i + 1] = a[i] / a[i + 1];
} else {
t[cnt++] = a[i];
}
}
t[cnt] = a[4];
res += t[0];
cnt = 0;
for (int i = 1; i < 4; i++) {
if (s[i] == '+') {
res += t[++cnt];
}
if (s[i] == '-') {
res -= t[++cnt];
}
}
if (res == a[5]) {
ans++;
}
return;
}
for (int i = 0; i < 4; i++) {
s[x] = ch[i];
dfs(x + 1);
}
}
int main() {
while (~scanf("%d%d%d%d%d", &k[1], &k[2], &k[3], &k[4], &k[5])) {
ans = 0;
dfs(1);
printf("%d\\n", ans);
}
return 0;
}
以上是关于共有多少种等式的主要内容,如果未能解决你的问题,请参考以下文章