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;
    }
  • 相关阅读:
    asp.net core文件上传与下载
    asp.net Core1.1版本生成超链接/a链接标签的方式
    CentOS 7.2 64位上装mysql
    CentOS7 yum 安装 Nginx最新版本
    Mysql Mariadb 密码问题
    关闭selinux
    OTRS
    CentOS查看一共安装了多少软件包,是那些软件包
    CentOS删除安装的程序
    centos7 上安装mysql5.7后登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Yes 或者No)
  • 原文地址:https://www.cnblogs.com/Keven02/p/7422028.html
Copyright © 2011-2022 走看看