Q:共有多少种等式?
题目描述:
有如下式子:n 1 ? n 2 ? n 3 ? n 4 = n 5。其中,? ??代表四则运算(+,-,*,/)。对于给定的n 1 , n 2 , n 3 , n 4,请问存在多少种不同的运算符组合可以使得等式成立?例如当输入为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 的值,此题有多组输入数据
输出:
满足条件的等式个数,每组数据一行。
样例输入:
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; }