zoukankan      html  css  js  c++  java
  • hdu 1427 速算24点(next_permutation 搜索)

    题意:给出四张扑克牌 问能否算出24

    思路:http://blog.csdn.net/xingyeyongheng/article/details/11137631

            其实这题只有两种运算顺序

             1(a@b)@c@d

             2 (a@b)@(c@d)

             所以只需要把数字和运算符全排列遍历一边就可以判断出结果

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int num[5],ok;
    const int INF=100000;
    int change_num(char a)
    {
        if(a=='A') return 1;
        else if(a=='J') return 11;
        else if(a=='Q') return 12;
        else if(a=='K') return 13;
        if(a=='1') return 10;
        else return a-'0';
    }
    int fun2(int a,int op,int b)
    {
        if(op==0)
        {
            return a+b;
        }
        else if(op==1)
        {
            return a-b;
        }
        else if(op==2)
        {
            return a*b;
        }
        else if(op==3)
        {
            if(b==0||a%b!=0 )return INF;
            return a/b;
        }
    }
    void fun1(int i,int j,int k)
    {
        if(ok==1) return;
        int t1,t2,t3;
        t1=fun2(num[0],i,num[1]);
        if(t1!=INF)
        {
            t2=fun2(t1,j,num[2]);
            if(t2!=INF)
            {
                t3=fun2(t2,k,num[3]);
    
                if(t3==24||t3==-24) ok=1;
            }
        }
        if(ok==0)
        {
            t1=fun2(num[0],i,num[1]);
            t2=fun2(num[2],j,num[3]);
            if(t1!=INF&&t2!=INF)
            {
                    t3=fun2(t1,k,t2);
                    if(t3==24||t3==-24) ok=1;
            }
        }
    }
    int main()
    {
        int i,j,k;
        char temp[5];
        while(scanf("%s",temp)!=EOF)
        {
            ok=0;
            num[0]=change_num(temp[0]);
            for(i=1;i<=3;i++)
            {
                scanf("%s",temp);
                num[i]=change_num(temp[0]);
            }
            sort(num,num+4);
            do
            {
               for(i=0;i<4;i++)
               {
                   for(j=0;j<4;j++)
                   {
                       for(k=0;k<4;k++)
                       {
                          fun1(i,j,k);
                       }
                   }
               }
               if(ok==1) break;
            }while (next_permutation(num,num+4));
            if(ok==1) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    Vue的基本使用
    django中的跨表查询梳理
    docker安装及配置
    大数据分析(一)探索性分析
    搜索引擎-一种提示词推荐算法
    shell变量详解
    机器学习之寻找KMeans的最优K
    大数据系统之监控系统(二)Flume的扩展
    大数据系统之监控系统(一)
    大数据系统之系统设计
  • 原文地址:https://www.cnblogs.com/sola1994/p/4495531.html
Copyright © 2011-2022 走看看