zoukankan      html  css  js  c++  java
  • 第九十八周,搜索24点

    题目链接:http://hihocoder.com/contest/hiho98/problem/1

    24点游戏大家都玩过。我算了一下,24点有4!*5*4*4*4种情况。

    从这个公式大家就能看出这个题目的思路来。

    4!就是这4个数的全排列,5就是加入括号的情况,总共5中,4*4*4就是三个符号的种类。

    这里比较有趣的地方是,符号的对应。

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    #include <algorithm>
    
    using namespace std;
    
    const int M=4;
    
    const int EPS=1e-10;
    
    const char oper[]="+-*/";
    
    double a[M];
    char p[M];
    
    bool flag;
    
    double add(double x,double y,int index)
    {
        switch(p[index])
        {
    
        case '+':
            return x+y;
    
        case '-':
            return x-y;
    
        case '*':
            return x*y;
    
        case '/':
            return x/y;
        }
    }
    
    bool cal()
    {
        bool f0=(24==add(add(add(a[0],a[1],0),a[2],1),a[3],2));
        bool f1=(24==add(add(a[0],a[1],0),add(a[2],a[3],2),1));
        bool f2=(24==add(a[0],add(add(a[1],a[2],1),a[3],2),0));
        bool f3=(24==add(a[0],add(a[1],add(a[2],a[3],2),1),0));
        bool f4=(24==add(add(a[0],add(a[1],a[2],1),0),a[3],2));
        return f0||f1||f2||f3||f4;
    }
    
    void dfs(int x)
    {
        if(x==3)
        {
            if(cal())
                flag=true;
            return ;
        }
    
        if(flag)
            return ;
        for(int i=0; i<4; i++)
        {
            p[x]=oper[i];
            dfs(x+1);
            if(flag)
                return ;
        }
    }
    
    int main()
    {
        int N;
        for(scanf("%d",&N); N--;)
        {
            for(int i=0; i<M; i++)
                scanf("%lfd",&a[i]);
    
            flag=false;
            sort(a,a+4);
            do
            {
                dfs(0);
                if(flag)
                    break;
            }
            while(next_permutation(a,a+4));
    
            puts(flag? "Yes":"No");
        }
        return 0;
    }
  • 相关阅读:
    手机APP远程空气质量监测应用
    SPI
    2017-10-14
    常量声明
    ios- nil NULL 和 NSNull
    Xcode搭建真机调试环境 图文实例
    ios notification
    集合对象总结
    集合对象(NSSet,NSMutableSet,NSIndexSet)
    词典对象(NSDictionary和NSMutableDictionary)
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5514640.html
Copyright © 2011-2022 走看看