hihoCoder1304:24点

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

周末,小Hi和小Ho都在家待着。

在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。

小Ho:玩点什么好呢?

小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。

小Ho:好啊,好啊。

<经过若干局游戏之后>

小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?

小Hi:让我想想。

<过了几分钟>

小Hi:我知道了!其实很简单嘛。

提示:24点

输入

第1行:1个正整数, t,表示数据组数,2≤t≤100。

第2..t+1行:4个正整数, a,b,c,d,1≤a,b,c,d≤10。

输出

第1..t行:每行一个字符串,第i行表示第i组能否计算出24点。若能够输出"Yes",否则输出"No"。

样例输入
2
5 5 5 1
9 9 9 9
样例输出
Yes
No
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
const double EPS=1.0e-2;
bool used[4];
int number[4];
int oneNumber[4];
char ops[3];
char opType[6]={‘+‘,‘-‘,‘*‘,‘/‘,‘#‘,‘$‘};

double cal(double x,double y,char op)
{
    switch(op)
    {
        case ‘+‘:return x+y;
        case ‘-‘:return x-y;
        case ‘*‘:return x*y;
        case ‘/‘:return x/y;
        case ‘#‘:return y-x;
        case ‘$‘:return y/x;
    }
}
double calType1()
{
    double x=cal((double)oneNumber[0],(double)oneNumber[1],ops[0]);
    double y=cal(x,(double)oneNumber[2],ops[1]);
    return cal(y,(double)oneNumber[3],ops[2]);
}
double calType2()
{
    double x=cal((double)oneNumber[0],(double)oneNumber[1],ops[0]);
    double y=cal((double)oneNumber[2],(double)oneNumber[3],ops[2]);
    return cal(x,y,ops[1]);
}
bool makeOperation(int dep)
{
    if(dep==3)
    {
        if(fabs(calType1()-24.0)<EPS)
        {
            return true;
        }
        if(fabs(calType2()-24.0)<EPS)
        {
            return true;
        }
        return false;
    }
    for(int i=0;i<6;i++)
    {
        ops[dep]=opType[i];
        if(makeOperation(dep+1))
        {
            return true;
        }
    }
    return false;
}

bool makeNumber(int dep)
{
    if(dep==4)
    {
        return makeOperation(0);
    }
    for(int i=0;i<4;i++)
    {
        if(!used[i])
        {
            used[i]=true;//注意不是number[i]
            oneNumber[dep]=number[i];
            if(makeNumber(dep+1))
            {
                return true;
            }
            used[i]=false;
        }
    }
    return false;
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        for(int i=0;i<4;i++)
        {
            cin>>number[i];
        }
        memset(used,false,sizeof(used));
        if(makeNumber(0))
        {
            cout<<"Yes"<<endl;
        }
        else
        {
            cout<<"No"<<endl;
        }
    }
    return 0;
}

时间: 2024-08-24 18:43:14

hihoCoder1304:24点的相关文章

24、剑指offer--二叉树中和为某一值的路径

题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 解题思路:本题采用先序遍历,遍历到叶子节点,如果和不等于其值,则返回至上一层的根结点,本题使用栈结构来存储路径,这样可以方便返回上一父结点的时候,将当前结点从路径中删除 1 /*struct TreeNode { 2 int val; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 Tre

【网络流24题】No.19 负载平衡问题 (费用流)

[题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input.txt517 9 14 16 4 输出文件示例output.txt11 [分析] 其实我觉得这题可以贪心啊..n^2贪心??.没细想.. 打的是费用流.. 大概这样建图: 懒得写了..凌乱之美.. 求满流费用.. 1 #include<cstdio> 2 #include<cstdlib&

Train Herblore Level with 9% off 500M runescape gold shop on RSorder 8.19-8.24

When an employer conducts a background rs3 gold check on their own they will usually only get a hold of information on the location held, dates associated with employment and in case the candidate is entitled to rehire.The very Runescape Grand Switch

192.168.0.1/16,1/24;192.168.1.1/16,1/24 &nbsp; IP段的意思

首先来了解一下二进制的转换知识: 二进制数转换成十进制数 二进制的1101转化成十进制1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13转化成十进制要从右到左用二进制的每个数去乘以2的相应次方不过次方要从0开始相反 用十进制的13除以2 每除一下将余数就记在旁边最后按余数从下向上排列就可得到1101十进制转二进制:用2辗转相除至结果为1将余数和最后的1从下向上倒序写 就是结果例如302302/2 = 151 余0151/2 = 75 余175/2 = 37 余1

家庭作业6.23 6.24 6.26 10.6

6.23 设半径为r的磁盘总的磁道是K 如上图去除的部分x*r的磁道数为x*K 那么剩下的磁道数为 (1-x)*K 所以总容量为 2*pi*x*r*(1-x)*K (其中pi,r和K都是常数) 也就是对x*(1-x)进行判断 可以得出x = 0.5的时候取最大 6.24 6.26 可以由以下公式计算得出 10.6 Unix进程打开的描述符赋给了stdin(描述符0).stdout(描述符1)和stderr(描述符2). open函数总是返回最低的未打开的描述符,所以第一次调用open函数会返回描

IOS 阶段学习第24天笔记(Block的介绍)

IOS学习(OC语言)知识点整理 一.Block 的介绍 1)概念: block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用 封装一段代码 可以在任何地方调用 block 也可以作为函数参数,以及函数返回值 2)Block 实例代码 1 //定义了一个block类型MyBlock,MyBlock类型的变量只能指向带两个int的参数和返回int的代码块 2 typedef int (^MyBlock)(int,int); 3 //定义一个函数指针 4

程序猿之---C语言细节24(段错误、类型提升、sizeof &#39;A&#39;)

主要内容:段错误.类型提升.sizeof  'A' #include <stdio.h> int main() { union test{ char a[10]; int b; }u; int *p = (int *)&(u.a[1]); // 没有引起总线错误 *p = 17; printf("%d\n",*p); #if 0 int *q = 0; // 引起段错误,在linux中运行可看到段错误,在windows下运行时直接出错 *q = 1; #endif

2-08. 用扑克牌计算24点(25) (ZJU_PAT 数学 枚举)

题目链接:http://pat.zju.edu.cn/contests/ds/2-08 一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌,即得到4个1~13的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式.每个数只能参与一次运算,4个数顺序可以任意组合,4个运算符任意取3个且可以重复取.运算遵从一定优先级别,可加括号控制,最终使运算结果为24.请输出一种解决方案的表达式,用括号表示运算优先.如果没有一种解决方案,则输出-1

分享一个可以获取7天24小时的天气预报API,包含PM2.5等数据

api地址: pm2.5 api http://api.lib360.net/open/pm2.5.json?city=洛阳 7天24小时天气api http://api.lib360.net/open/weather.json?city=苏州 GET 请求 参数 prov   可选省份 如:江苏  河北 city   城市名称 如:苏州 上海 返回数据格式 json data 字段 返回7天的天气状况,包含今天 data24 返回 今天24小时内的预报 pm25 返回当前城市的 pm25 值