全排列+回溯(不过用的是DFS,囧)
题意:
给出5个数字,顺序可以任意排列,有三种运算:加、减、乘,不考虑优先级,按顺序计算,判断能否有一种方案得出的结果是23。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[5];
int leapp;
void dfs(int x,int num)
{
if(num==23&&x==5)
{
leapp=1;
return;
}
if(x>=5)return ;
dfs(x+1,num+a[x]);
dfs(x+1,num-a[x]);
dfs(x+1,num*a[x]);
}
int main()
{
int leap;
int i;
while(1)
{
leap=0;
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
if(a[i])leap=1;
}
if(!leap)break;
leapp=0;
sort(a,a+5);
dfs(1,a[0]);
while(!leapp&&next_permutation(a,a+5))
{
dfs(1,a[0]);
}
if(!leapp)
printf("Impossible\n");
else
printf("Possible\n");
}
return 0;
}