五个数三个运算符号,排列之后凑成结果为23,不考虑优先级。
很水,数据量也不大,先生成五个数的全排列,用dfs找出结果能否为23即可。
代码:
#include <cstdio> #include <algorithm> using namespace std; #define RES 23 const int maxn = 5; int num[maxn]; bool flag; bool input(void) { for (int i = 0; i < maxn; i++) scanf("%d", &num[i]); if (num[0] || num[1] || num[2] || num[3] || num[4]) return true; return false; } void dfs(int res, int d) { if (flag) return; if (d == maxn) { if (res == RES) flag = true; return; } dfs(res + num[d], d + 1); dfs(res - num[d], d + 1); dfs(res * num[d], d + 1); } int main() { while (input()) { sort (num, num + maxn); flag = false; do { dfs(num[0], 1); } while (!flag && next_permutation(num, num + maxn)); if (flag) printf("Possible "); else printf("Impossible "); } return 0; }