题意:有5个数和+ - * 三种运算,问5个数经过各种运算能否得到23.
思路:简单的搜索吧,用next_permutation 求出各种排列 再搜索一遍。
//0 KB 719 ms
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int a[5];
bool flag;
void DFS(int pre,int cur)
{
if (flag) return ;
if (cur == 5&&pre == 23)
{
flag = true;
return ;
}
if (cur > 4)
return ;
for (int i = 0;i < 3;i ++)
{
if (i == 0)
DFS(pre+a[cur],cur+1);
if (i == 1)
DFS(pre-a[cur],cur+1);
if (i == 2)
DFS(pre*a[cur],cur+1);
}
}
int main ()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int i,cnt;
while (1)
{
cnt = 0;
for (i = 0;i < 5;i ++)
{
scanf ("%d",&a[i]);
if (!a[i])
cnt ++;
}
if (cnt == 5) break;
sort(a,a+5);
flag = false;
do
{
DFS(a[0],1);
}while (next_permutation(a,a+5)&&!flag);
if (flag) printf ("Possible\n");
else printf ("Impossible\n");
}
return 0;
}