hihocoder 九十八周 搜索一 24点

题目1 : 搜索一·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思路:简单的dfs,但是要用浮点;
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define inf 999999999
#define esp 0.00000000001
//#pragma comment(linker, "/STACK:102400000,102400000")
int scan()
{
    int res = 0 , ch ;
    while( !( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) )
    {
        if( ch == EOF ) return 1 << 30 ;
    }
    res = ch - ‘0‘ ;
    while( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ )
        res = res * 10 + ( ch - ‘0‘ ) ;
    return res ;
}
double a[5],ans;
void dfs(double num,double gg,int step)
{
    if(step==4)
    {
        if(num==24)
        ans=1;
        return;
    }
    //不加括号
    dfs(num+gg,a[step+1],step+1);
    dfs(num-gg,a[step+1],step+1);
    dfs(num*gg,a[step+1],step+1);
    if(gg!=0)
    dfs(num/gg,a[step+1],step+1);
    //加括号
    if(step!=3)
    {
        dfs(num,gg+a[step+1],step+1);
        dfs(num,gg*a[step+1],step+1);
        dfs(num,gg-a[step+1],step+1);
        if(a[step+1]!=0)
        dfs(num,gg/a[step+1],step+1);
    }
}
int main()
{
    int x,y,z,i,t;
    scanf("%d",&x);
    while(x--)
    {
        ans=0;
        for(i=0;i<4;i++)
        scanf("%lf",&a[i]);
        sort(a,a+4);
        do
        {
            dfs(a[0],a[1],1);
        }
        while(next_permutation(a,a+4));
        if(ans)
        printf("Yes\n");
        else
        printf("No\n");
    }
    return 0;
}

时间: 2024-12-04 10:16:48

hihocoder 九十八周 搜索一 24点的相关文章

hiho一下 第九十八周 题目1 : 搜索一&#183;24点

题目1 : 搜索一·24点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 周末,小Hi和小Ho都在家待着. 在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间. 小Ho:玩点什么好呢? 小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏. 小Ho:好啊,好啊. <经过若干局游戏之后> 小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊? 小Hi:让我想想. <过了几分钟> 小Hi:我知道了!其实很简单嘛.

20172313 2017-2018-2 《程序设计与数据结构》第八周学习总结

20172313 2017-2018-2 <程序设计与数据结构>第八周学习总结 教材学习内容总结 了解了在多态引用时的后绑定的概念. 学习练习如何利用继承方式来实现多态性. 学习练习如何利用接口来实现多态性. 初步学习算法,了解学习了两种对数组中的元素进行排序的方法. 了解学习了两种在一组元素中寻找一个指定的目标元素的方法. 初步学习判断何时使用多态性设计对问题进行解决,并体会利用多态性所带来的好处. 教材学习中的问题和解决过程 问题1:在刚刚开始学习利用接口实现多态性的时候感觉很奇怪,因为在

20172332 2017-2018-2 《程序设计与数据结构》第八周学习总结

20172332 2017-2018-2 <程序设计与数据结构>第八周学习总结 教材学习内容总结 第十章多态性 1.后绑定. 效率低于编译阶段的绑定效率. 2.利用继承实现多态性. 3.利用接口实现多态性. 4.排序. 选择法排序.(从左到右扫描到最小的数) 插入法排序.(依次选取数与之前排列好的数列进行比较然后插入) 综合考虑,选择法优于插入法. 5.搜索. 线性搜索. 二分搜索.(必须是按顺序排列好的) 二分搜索的效率高于线性搜索,但是线性搜索的实现比二分搜索简单. 6.多态性设计(多个不

学习IPC进程间通信的总结(第八周)

10月24日晚上,回到宿舍准备写这周的总结时,看了下课表突然意识到这已经是第八周,不得不说时间过得真快,与前两年轻松的.无任务的课程相比,今年真是充实了太多!这也许是感觉时间过得快的原因,但是最近我也遇到了许多问题,当接触的知识多了以后,发现自己要学的东西太多了,仅仅上课所学远远不够,所以课后自学了一些课程,遇到的问题一是自己好高骛远,总想急于求成,这看一点那看一点,没有系统的全面的琢磨一本书,问题二:对于应用方面的知识学到手很快,但也会很快的忘记,到了应用时只记得一些概念了.对于这两个问题,我

进度条--第八周

第八周 所花时间(包括上课) 上课时间 4小时 团队编程 12小时 阅读构建之法2小时 共计18小时 代码量(行) 250 博客量(篇) 11篇(个人博客总结1-6篇,典型用户与场景分析,搜狗搜索引擎评价,构建之法阅读笔记—代码规范,构建之法阅读笔记—结对编程) 了解到的知识点 1.在团队开发项目中,如何让自己开发的软件有实用的价值,做好典型用户的分析,从不同的方面如何定义典型用户,和典型用户到场景的分析 2.如何做好人机交互,让自己设计的软件要符合用户的需求,包括要从用户的角度考虑,从头到尾记

第八周PSP&amp;进度条

团队项目PSP 一.表格:     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论各个模块页面设计 9:30 12:30 32 148 120 站立会议 分配各个成员任务 13:00 13:30 0 30*7=210 210 分析 分析需求制定方案 14:03 16:40 20 277 120 设计 设计各个模块的UI 9:00 11:20 37 103 150 搜集整理 搜集和整理礼物相关素材  13:30  15:48  24

20145317 《信息安全系统设计基础》第八周总结2

20145317 <信息安全系统设计基础>第八周总结2 考题复习 填空:Linux Bash中,查找home目录中昨天创建的文件的命令是(find ~ -ctime 1). 在指定目录下搜索指定文件名的文件:find /etc/ -name interfaces注意 find 命令的路径是作为第一个参数的 基本命令格式为 find [path] [option] [action] 与时间相关的命令参数:-atime 最后访问时间-ctime 创建时间-mtime 最后修改时间 判断:Linux

LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程

LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 黄韧(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.知识概要 Linux中进程调度的基本概念与相关知识 schedule函数如何实现进程调度 Linux进程的执行过程(一般情况与特殊情况) 宏观描述Linux系统执行 二.学习笔记 (一)进程切换的关键代码switch_to分析 进程进度与进程调度的时机分析 1.

第八周(运算符重载)Time类

/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:第八周(运算符重载) *作者:王忠 *完成日期:2015.4.28 *版本号:v1.0 * *问题描述:实现Time类中的运算符重载. *输入描述: *程序输出: #include <iostream> using namespace std; class CTime { private: unsigned short int hour; // 时 unsigned shor