标签:
这道题好像不是回溯就是简单的递归,全排列一下就ok啦,晚上估计不能好好刷题了
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int cmp(const void *c,const void *d)
{
return *(int *)c - *(int *)d ;
}
int flag;
int a[5];
void dfs(int cur,int sum)
{
if(flag == 1)
return ;
if(cur == 4 && sum == 23)
{
flag = 1;
return ;
}
if(cur == 4)
return ;
for(int i=0; i<3; i++)
{
if(i == 0)
dfs(cur+1,sum + a[cur+1]);
else if(i == 1)
dfs(cur+1,sum - a[cur+1]);
else
dfs(cur+1,sum * a[cur+1]);
}
return ;
}
int main()
{
while(scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]),a[0]||a[1]||a[2]||a[3]||a[4])
{
qsort(a,5,sizeof(a[0]),cmp);
flag = 0;
do
{
dfs(0,a[0]);
}while(next_permutation(a,a+5));
if(flag)
puts("Possible");
else
puts("Impossible");
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/sinat_22659021/article/details/47105625