uva10344 - 23 out of 5

来源:互联网 发布:mac边充电边用好吗 编辑:程序博客网 时间:2024/05/16 03:19

很简单的一题,先对5个数全排,然后对数之间加入+,-,*;

ac代码,用时2.412s

#include <iostream>#include <cstring>#include<cstdio>#include<cstdlib>#include <string>#include<algorithm>//#define MARK -2147483647using namespace std;int fuhao[]={1,2,3};int flag;int jf[6];int shu[10];void jisuan(int f){   int i;    if(f==4)    {   int shuu=shu[0];int shi=1;        for(i=0;i<4;++i)        {            switch(jf[i])            {                case 1: shuu*=shu[shi++];break;                case 2: shuu+=shu[shi++];break;                case 3: shuu-=shu[shi++];break;            }        }        if(shuu==23)flag=1;        return;    }    for(i=0;i<3;++i)    {        jf[f]=fuhao[i];        jisuan(f+1);    }return;}int main(){// freopen("in.txt","r",stdin);    int i;    while(scanf("%d%d%d%d%d",&shu[0],&shu[1],&shu[2],&shu[3],&shu[4]))    {   flag=0;        if(!shu[0]&&!shu[2]&&!shu[3]&&!shu[4]&&!shu[1])break;        sort(shu,shu+5);        do        {            jisuan(0);if(flag)break;        }while(next_permutation(shu,shu+5));        if(flag)printf("Possible\n");        else printf("Impossible\n");    }    return 0 ;}


对上面代码进行改进,ac,用时0.319s,深刻认识到了代码简洁的重要性。

#include <iostream>#include <cstring>#include<cstdio>#include<cstdlib>#include <string>#include<algorithm>//#define MARK -2147483647using namespace std;int fuhao[]={1,2,3};int flag;int jf[6];int shu[10];//void jisuan(int f)//{   int i;//    if(f==4)//    {   int shuu=shu[0];int shi=1;//        for(i=0;i<4;++i)//        {//            switch(jf[i])//            {//                case 1: shuu*=shu[shi++];break;//                case 2: shuu+=shu[shi++];break;//                case 3: shuu-=shu[shi++];break;//            }//        }//        if(shuu==23)flag=1;//        return;//    }//    for(i=0;i<3;++i)//    {//        jf[f]=fuhao[i];//        jisuan(f+1);//    }return;//}void jisuan(int cur,int sum){    if(cur==5) {if(sum==23)flag=1;return; }    jisuan(cur+1,sum*shu[cur]);    if(flag)return;    jisuan(cur+1,sum+shu[cur]);    if(flag)return;    jisuan(cur+1,sum-shu[cur]);    if(flag)return;    return;}int main(){// freopen("in.txt","r",stdin);    int i;    while(scanf("%d%d%d%d%d",&shu[0],&shu[1],&shu[2],&shu[3],&shu[4]))    {   flag=0;        if(!shu[0]&&!shu[2]&&!shu[3]&&!shu[4]&&!shu[1])break;        sort(shu,shu+5);        do        {            jisuan(1,shu[0]);if(flag)break;        }while(next_permutation(shu,shu+5));        if(flag)printf("Possible\n");        else printf("Impossible\n");    }    return 0 ;}


 

原创粉丝点击