UVA10344五个数从前往后进行加减乘运算能否得到23

来源:互联网 发布:马扎克加工中心编程 编辑:程序博客网 时间:2024/05/29 16:51

这个题刚开始想着是加减运算,就想着去开个stack,然后进行递归调用,然后发现用stack做函数参数好像并不能得到正确的

答案,然后就想了其他办法,就是把每次运算的结果作为第一个参数,把要用的下一个运算数在数组a中的下标作为另外一个参数,

当第二个参数为6时,即运算完毕,然后判断是否为23就行了。

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<string>#include<algorithm>#include<map>#include<set>#include<vector>#include<stack>#include<queue>#include<climits>#define LL long longusing namespace std;int a[6];bool dfs(int x,int cur){    if(cur==6)    {        if(x==23)            return 1;        return 0;    }    if(dfs(x-a[cur],cur+1))        return 1;    if(dfs(x+a[cur],cur+1))        return 1;    if(dfs(x*a[cur],cur+1))        return 1;    return 0;}int main(){   while(cin>>a[0])   {       cin>>a[1]>>a[2]>>a[3]>>a[4];       if(!a[0]&&!a[1]&&!a[2]&&!a[3]&&!a[4]) break;       a[5]=0;       sort(a,a+5);       int flag=0;       stack<int> s;       do       {           if(dfs(a[0],1))           {               flag=1;               break;           }       }while(next_permutation(a,a+5));       if(flag)       cout<<"Possible"<<endl;       else        cout<<"Impossible"<<endl;   }   return 0;}


0 0
原创粉丝点击