题意:给出五个数字,任意两个数运用加、减、乘三种运算符之一运算,最后的结果能否是23。
题解:现将五个数字从小到大排序,然后全排列进行递归判断。
#include <stdio.h>
#include <algorithm>
using namespace std;
int s[5], flag, now[5];
void dfs(int pos, int val) {
if (val == 23 && pos == 4)
flag = 1;
if (pos < 4 && !flag) {
int temp = val + s[pos + 1];
dfs(pos + 1, temp);
temp = val - s[pos + 1];
dfs(pos + 1, temp);
temp = val * s[pos + 1];
dfs(pos + 1, temp);
}
}
int main() {
while (scanf("%d%d%d%d%d", &s[0], &s[1], &s[2], &s[3], &s[4]) && (s[0] || s[1] || s[2] || s[3] || s[4])) {
flag = 0;
sort(s, s + 5);
do {
dfs(0, s[0]);
} while (next_permutation(s, s + 5));
if (flag)
printf("Possible\n");
else
printf("Impossible\n");
}
return 0;
}