题目大意:给你5个 1 ~ 50 范围内的整数,求能否使这 5 个数经过4次加、减、乘的运算得出 23
解题思路:直接 DFS 查找所有可能的情况,当经过 4 次运算得出 23 就结束查找
#include <cstdio>
#include <algorithm>
using namespace std;
int arr[10], ok;
int dfs(int i, int sum) {
if (i == 4 && sum == 23)
ok = 1;
if (i < 4 && !ok) {
dfs(i + 1, sum * arr[i + 1]);
dfs(i + 1, sum + arr[i + 1]);
dfs(i + 1, sum - arr[i + 1]);
}
}
int main() {
while (scanf("%d%d%d%d%d", &arr[0], &arr[1], &arr[2], &arr[3], &arr[4]), arr[0]) {
sort(arr, arr + 5);
ok = 0;
do {
dfs(0, arr[0]);
} while (next_permutation(arr, arr + 5));
printf(ok ? "Possible\n" : "Impossible\n");
}
return 0;
}