Description

为了培养小孩的计算能力,大人们经常给小孩玩这样的游戏:从1付扑克牌中任意抽出4张扑克,要小孩用“+”、“-”、“×”、“÷”和括号组成一个合法的表达式,并使表达式的值为24点。这种游戏就是所谓的“24点游戏”。请你编程求出对于给出的任意4个正整数a、b、c、d,请你编程求出这4个整数能组成多少个值为24的不同表达式。

Input

输入共一行,为4个正整数a、b、c、d (0<=a,b,c,d<=100)

Output

输出由a、b、c、d组成的值为24表达式个数,如没有,输出0。

两个不加多余括号的表达式相同当且仅当仅当完全相同或通过结合律可以互相转换

枚举可能的表达式,最多7680个,且要求表达式树中+或*的右子节点不为同优先级运算符

#include<cstdio>
#include<cmath>
#include<algorithm>
#define _0 0.000001
int v[],rnk[];
int hs[],p=,ans=;
inline void add(int v1,int v2,int v3,int v4,int v5,int v6,int v7){
hs[p++]=(v1|v2<<|v3<<|v4<<|v5<<|v6<<|v7<<);
}
inline double f(double a,double b,int op){
if(op==)return a+b;
if(op==)return a-b;
if(op==)return a*b;
return a/b;
}
inline bool e(int a,int b){
if(a==)return b>;
if(a==)return b<;
return ;
}
inline void chk(int v1,int v2,int v3,int v4){
for(int o1=;o1<;o1++){
for(int o2=;o2<;o2++){
for(int o3=;o3<;o3++){
bool e1=e(o3,o2),e2=e(o2,o1);
if(fabs(f(f(f(v[v1],v[v2],o1),v[v3],o2),v[v4],o3)-)<_0)add(rnk[v1],rnk[v2],o1+,rnk[v3],o2+,rnk[v4],o3+);
if(e1&&fabs(f(f(v[v1],v[v2],o1),f(v[v3],v[v4],o2),o3)-)<_0)add(rnk[v1],rnk[v2],o1+,rnk[v3],rnk[v4],o2+,o3+);
if(e2&&fabs(f(f(v[v1],f(v[v2],v[v3],o1),o2),v[v4],o3)-)<_0)add(rnk[v1],rnk[v2],rnk[v3],o1+,o2+,rnk[v4],o3+);
if(e1&&fabs(f(v[v1],f(f(v[v2],v[v3],o1),v[v4],o2),o3)-)<_0)add(rnk[v1],rnk[v2],rnk[v3],o1+,rnk[v4],o2+,o3+);
if(e1&&e2&&fabs(f(v[v1],f(v[v2],f(v[v3],v[v4],o1),o2),o3)-)<_0)add(rnk[v1],rnk[v2],rnk[v3],rnk[v4],o1+,o2+,o3+);
}
}
}
}
int main(){
for(int i=;i<;i++)scanf("%d",v+i);
for(int i=;i<;i++){
for(int j=;j<;j++)
if(i!=j)rnk[i]+=v[i]<v[j];
}
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
chk(,,,);
std::sort(hs,hs+p);
if(p)ans=;
for(int i=;i<p;i++)ans+=(hs[i]!=hs[i-]);
printf("%d",ans);
return ;
}

bzoj1215 24点游戏的更多相关文章

  1. 经典趣味24点游戏程序设计(python)

    一.游戏玩法介绍: 24点游戏是儿时玩的主要益智类游戏之一,玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24.例如,2,3,4,6,通过( ( ( 4 + 6 ) - ...

  2. cdoj 1252 24点游戏 dfs

    24点游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1252 Descr ...

  3. 24点游戏&&速算24点(dfs)

    24点游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  4. 24点游戏详细截图介绍以及原型、Alpha、Beta对比

    原型设计 图片展示 功能与界面设计 1.登录注册 2.手机号验证 3.24点游戏 4.粉色系女生界面 Alpha 图片展示 功能与界面设计 1.24点游戏 2.背景音乐 3.可查看多种可能的答案 4. ...

  5. 【Nodejs】“快算24”扑克牌游戏算法

    算24是一款扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过四则运算得到结果24,四张牌必须仅用一次.这是一种挺好的锻炼孩子算数能力的扑克牌游戏. 各地玩法还有点差别,有的只算1-10,其它抽出来:有 ...

  6. Leetcode 679.24点游戏

    24点游戏 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: (8-4) ...

  7. php实现 24点游戏算法

    php实现 24点游戏算法 一.总结 一句话总结:把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算.在求表达式的过程中,最难处理的 ...

  8. Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game)

    Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game) 深度优先搜索的解题详细介绍,点击 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+, ...

  9. 用python代替人脑运算24点游戏

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

随机推荐

  1. hdu_2048 错排问题

    错排问题本质上就是一个动态规划问题,其状态转移方程为: 记d[n]为n个人错排情况的总数. 那么策略可以描述为:分析第n个人错排的可能情况: 1)前n-1个人满足错排的情况,那么第n个人加入后还要错排 ...

  2. hdu 6430 线段树 暴力维护

    Problem E. TeaTree Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Oth ...

  3. Linux 用户和组的 添加/删除

    1.建用户:adduser phpq //新建phpq用户passwd phpq //给phpq用户设置密码 2.建工作组groupadd test //新建test工作组 3.新建用户同时增加工作组 ...

  4. Visitor(访问者)

    意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 适用性: 一次性实现一个算法的不变的部分, ...

  5. 解决本地项目推送到码云(github),上提示:failed to push some refs to ...

    本地项目上传github 命令如下: 1.git init 2.git add . 3.git commit  -m "init" 4.git remote add origin ...

  6. Android之获取输入用户名与密码发送短信

    打算在过两三天的时间我就要准备出发去浙江了,所以把之前的资料来个总结. 这都是在课堂上做过的作业. 好了,废话少说,直接上代码. 步骤: 1.设置单击事件2.获取输入的QQ号码与密码3.判断输入获取的 ...

  7. 关联规则&Apriori算法

    2017-12-02 14:27:18 一.术语 Items:项,简记I Transaction:所有项的一个非空子集,简记T Dataset:Transaction的一个集合,简记D 关联规则: 一 ...

  8. MySQL分页查询大数据量优化方法

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N适应场景: 适用于数据量较少的情况(元组百/千级)原因/缺点: ...

  9. python实现:将文本文件分割成多个小文本文件(php也可实现)

    前两天有个朋友说,想实现一个文本文件按照固定行数进行分割成多个文本文件,却不知如何实现.如果数据量小手动分割下就好了,如果数据量很大的话手动完成实在太耗费人力了,也不现实.那么就需要借助脚本去实现.既 ...

  10. PHP:第六章——02正则基本语法

    <?php header("Content-Type:text/html;charset=utf-8"); //正则表达式的基本结构:匹配符.匹配模式.模式修饰符 //元字符 ...