标签:
这道题好像不是回溯就是简单的递归,全排列一下就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