uva-10344 - 23 out of 5

来源:互联网 发布:unity3d 游戏关卡制作 编辑:程序博客网 时间:2024/05/17 23:37

全排列+回溯(不过用的是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;}


原创粉丝点击