zoukankan      html  css  js  c++  java
  • 24点游戏dfs求解

    24点游戏

    Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu

     Status

    Description

     24点就是给你一串数字,问你是否通过加减乘除括号构成 24点。

    沈爷觉得这个很好玩,就决定考考你,给你 4个数,可以交换位置,可以用加减乘除和括号,是否能构成 24点呢?

    注意哦~这里的除法并不是整数除法,比如样例

    Input

    第一行 T,表示有多少组测试数据, 1≤T≤50

    接下来 T行,每行 4个正整数   a1,    a2,    a3,    a4,表示每个数都是多少,   1≤ai≤13

    Output

    对于每一次询问,如果能够凑成 24点,输出yes,否则输出no

    Sample Input


    3 3 8 8 
    1 1 1 1

    Sample Output

    yes 
    no

    Hint

        8

    就可以构造出 - 

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    double num[10];
    bool flag;
    bool dfs(int x)
    {
        if(x==1)
        {
            if(fabs(num[0]-24)<1e-2)
            return true;
            else 
            return false;
        }
        double a,b;
        for(int i=0;i<x;i++)
        {
            for(int j=i+1;j<x;j++)
            {
                a=num[i];
                b=num[j];
                num[j]=num[x-1];//x表示运算的次数,也用来确定区间,
                //每次x-1,同时区间缩小,num[0]作为运算的结果 ,其实就是覆盖计算过的数,后面的数向前移动一个位置。
                num[i]=a+b;if(dfs(x-1)) return true;
                num[i]=a-b;if(dfs(x-1)) return true;
                num[i]=b-a;if(dfs(x-1)) return true;
                num[i]=a*b;if(dfs(x-1)) return true;
                if(b!=0) num[i]=a/b;if(dfs(x-1)) return true;//除法分母不为0 
                if(a!=0) num[i]=b/a;if(dfs(x-1)) return true;
                num[i]=a;//回溯 
                num[j]=b;
            }
        }
        return false;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            flag=false;
            for(int i=0;i<4;i++)
            cin>>num[i];
            if(dfs(4))
            cout<<"yes"<<endl;
            else 
            cout<<"no"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/Keven02/p/7422028.html
Copyright © 2011-2022 走看看