题意:给出5个数字,自由组合,用+,-,*,是否能算出23
思路:全排列,然后就深搜,是否能得到23
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int arr[5];
int flag;
void dfs(int x, int d){
if(flag)
return;
if (x == 5){
if(d == 23)
flag = 1;
return;
}
dfs(x + 1, d + arr[x]);
dfs(x + 1, d - arr[x]);
dfs(x + 1, d * arr[x]);
}
int main(){
while (true){
flag = 0;
for (int i = 0; i < 5; i++)
scanf("%d", &arr[i]);
if (!arr[0] && !arr[1] && !arr[2] && !arr[3] && !arr[4])
break;
sort(arr, arr + 5);
dfs(1, arr[0]);
while(!flag && next_permutation(arr, arr + 5))
{
dfs(1, arr[0]);
}
if(flag)
printf("Possible\n");
else
printf("Impossible\n");
}
return 0;
}