• 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;
    }
  • 相关阅读:
    面试题(三)
    面试题(二)
    经典面试题(一)
    $.ajax()实现简单计算器
    [hdu5373 The shortest problem]模拟
    [hdu5371 Hotaru's problem]最大回文半径
    [hdu5372 Segment Game]树状数组
    [zoj3813]Alternating Sum 公式化简,线段树
    [hdu5348]图上找环,删环
    [hdu5360]贪心
  • 原文地址:https://www.cnblogs.com/Keven02/p/7422028.html
Copyright © 2020-2023  润新知