UVA 10344 23 out of 5
题目大意:给出五个数,问随机组合后中间+,-,*运算是否能使结果为23
解题思路:先全排列,然后回溯
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int num[5];
int flag;
void dfs(int a, int b) {
if(b == 5) {
if(a == 23)
flag = 1;
return;
}
if(flag)
return;
dfs(a+num[b],b+1);
dfs(a*num[b],b+1);
dfs(a-num[b],b+1);
}
int main() {
while(1) {
int p = 0;
for(int i = 0; i < 5; i++) {
cin >> num[i];
if(num[i])
p = 1;
}
if(!p)
break;
sort(num, num + 5);
flag = 0;
dfs(num[0], 1);
while(!flag) {
if(next_permutation(num, num + 5))
dfs(num[0], 1);
else
break;
}
if(flag)
printf("Possible\n");
else
printf("Impossible\n");
}
return 0;
}