PAT 2-08. 用扑克牌计算24点(25):
题目链接:http://www.patest.cn/contests/ds/2-08
解题思路:思路参考24点游戏技巧http://www.24game.com.cn/articles/points24-game-tips-grade6.html
方法为:暴力枚举每次所选的数字和运算符的五种不同运算方式
五种不同运算方式如下(括号的五种不同组合):
((a1 op1 a2) op2 a3) op3 a4
(a1 op1 (a2 op2 a3)) op3 a4
(a1 op1 a2) op2 (a3 op3 a4)
a1 op1 ((a2 op2 a3) op3 a4)
a1 op1 (a2 op2 (a3 op3 a4))
代码如下:
#include <cstdio>
char op[5]= {'#','+','-','*','/',};
double cal(double x,double y,int op)
{
switch(op)
{
case 1:
return x+y;
case 2:
return x-y;
case 3:
return x*y;
case 4:
return x/y;
}
}
double cal_m1(double i,double j,double k,double t,int op1,int op2,int op3)
{
double r1,r2,r3;
r1 = cal(i,j,op1);
r2 = cal(r1,k,op2);
r3 = cal(r2,t,op3);
return r3;
}
double cal_m2(double i,double j,double k,double t,int op1,int op2,int op3)
{
double r1,r2,r3 ;
r1 = cal(i,j,op1);
r2 = cal(k,t,op3);
r3 = cal(r1,r2,op2);
return r3;
}
double cal_m3(double i,double j,double k,double t,int op1,int op2,int op3)
{
double r1,r2,r3;
r1 = cal(j,k,op2);
r2 = cal(i,r1,op1);
r3 = cal(r2,t,op3);
return r3;
}
double cal_m4(double i,double j,double k,double t,int op1,int op2,int op3)
{
double r1,r2,r3 ;
r1 = cal(k,t,op3);
r2 = cal(j,r1,op2);
r3 = cal(i,r2,op1);
return r3;
}
double cal_m5(double i,double j,double k,double t,int op1,int op2,int op3)
{
double r1,r2,r3;
r1 = cal(j,k,op2);
r2 = cal(r1,t,op3);
r3 = cal(i,r2,op1);
return r3;
}
int get_24(int i,int j,int k,int t)
{
for(int op1 = 1; op1 <= 4; op1++)
{
for(int op2 = 1; op2 <= 4; op2++)
{
for(int op3 = 1; op3 <= 4; op3++)
{
if(cal_m1(i,j,k,t,op1,op2,op3) == 24)
{
printf("((%d%c%d)%c%d)%c%d\n",i,op[op1],j,op[op2],k,op[op3],t);
return 1;
}
if(cal_m2(i,j,k,t,op1,op2,op3) == 24)
{
printf("(%d%c%d)%c(%d%c%d)\n",i,op[op1],j,op[op2],k,op[op3],t);
return 1;
}
if(cal_m3(i,j,k,t,op1,op2,op3) == 24)
{
printf("(%d%c(%d%c%d))%c%d\n",i,op[op1],j,op[op2],k,op[op3],t);
return 1;
}
if(cal_m4(i,j,k,t,op1,op2,op3) == 24)
{
printf("%d%c(%d%c(%d%c%d))\n",i,op[op1],j,op[op2],k,op[op3],t);
return 1;
}
if(cal_m5(i,j,k,t,op1,op2,op3) == 24)
{
printf("%d%c((%d%c%d)%c%d)\n",i,op[op1],j,op[op2],k,op[op3],t);
return 1;
}
}
}
}
return 0;
}
int main()
{
int a[4];
int t1, t2, t3, t4;
int flag;
for(int i = 0; i < 4; i++)
scanf("%d",&a[i]);
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
if(j==i)
continue;
for(int k = 0; k < 4; k++)
{
if(i==k||j==k)
continue;
for(int t = 0; t < 4; t++)
{
if(t==i||t==j||t==k)
continue;
t1 = a[i], t2= a[j], t3= a[k], t4= a[t];
flag = get_24(t1,t2,t3,t4);
if(flag ==1)
break;
}
if(flag == 1)
break;
}
if(flag == 1)
break;
}
if(flag == 1)
break;
}
if(flag == 0)
printf("-1\n");
return 0;
}
暴力枚举代码转载自:http://blog.csdn.net/u012860063/article/details/40435363
PAT 2-08. 用扑克牌计算24点(25):的更多相关文章
- 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~ ...
- PAT_2-08. 用扑克牌计算24点
一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌,即得到4个1~13的数,请添加运算符 (规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式.每个数 ...
- C语言-纸牌计算24点小游戏
C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...
- ZT ---- 给孩子的信(孩子写给爸爸妈妈的信在24、25、26楼)
胡同口 > 情感 > 婚后空间 > 给孩子的信(孩子写给爸爸妈妈的信在24.25.26楼) 给孩子的信(孩子写给爸爸妈妈的信在24.25.26楼)分享: 腾讯微博 新浪微博 QQ空间 ...
- Web安全测试周末公开班计划5月24、25日开课,欢迎报名参加!
Web安全测试周末公开班计划5月24.25日开课,欢迎报名参加! 课程大纲参考: http://gdtesting.com/product.php?id=107 报名咨询: 黎小姐 QQ:241448 ...
- 【Python】我是如何使计算时间提速25.6倍的
我是如何使计算时间提速25.6倍的 我的原始文档:https://www.yuque.com/lart/blog/aemqfz 在显著性目标检测任务中有个重要的评价指标, E-measure, 需要使 ...
- PAT甲级:1066 Root of AVL Tree (25分)
PAT甲级:1066 Root of AVL Tree (25分) 题干 An AVL tree is a self-balancing binary search tree. In an AVL t ...
- 计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 (-) ,乘 ( * ), 除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王:
include "stdafx.h" #include <iostream> #include <fstream> #include <string& ...
- [HDU 1427]速度计算24点(DFS暴力搜索)
主题连接: pid=1427">http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表 ...
随机推荐
- 数据治理工具调研之DataHub
1.项目简介 Apache Atlas是Hadoop社区为解决Hadoop生态系统的元数据治理问题而产生的开源项目,它为Hadoop集群提供了包括数据分类.集中策略引擎.数据血缘.安全和生命周期管理在 ...
- springboot+redis做事件过期通知业务
springboot+redis做事件过期通知 博主也是初次体验,不足之处多多指教 我的业务场景 系统管理员要给维护员分配巡查路口设施的工作,由于路口比较多,管理员不知道哪些路口已经被分配了,况且过了 ...
- webview访问URL
// // Do any additional setup after loading the view. // //创建WKWebView // WKWebView *web = ...
- python中的and与or
一.问题起源: main=None main=main or sys.modules["__main__"].main main返回的是后面一个值,即 sys.modules[&q ...
- Spring发布WebService并调用已有的WebService
发布WebService 1.编写生成WebService的Java类 package com.webService; import com.service.PianoServiceImpl; imp ...
- vector 赋初始值的问题
这个,输出为1 这个,啥都输不出来. 据说是因为没有初始化. 其实我搜了一下 vector<vector<int> > A;//正确的定义方式 vector<vector ...
- linux gdb 入门级教程(小白专用)
送给包含我在内的所有小白: 对于养linux真姬的本小白来说,既然你选择养它,那你就要满足他. 如果你养了它是为了码代码,那我觉得gdb应该是它的基本需求了吧?! 然而gdb哪有那些IDE来的简单啊, ...
- 无法安装 VMware Tools。尝试访问安装 VMware Tools 所需的图像文件“/usr/lib/vmware/isoimages/linuxPreGlibc25.iso”时出错: 2 (No such file or directory)。请参考产品文档或知识库文章 2129825,了解关于如何获取该客户机操作系统的 VMware Tools 软件包的详细信息。
无法安装 VMware Tools.尝试访问安装 VMware Tools 所需的图像文件"/usr/lib/vmware/isoimages/linuxPreGlibc25.iso&quo ...
- MySQL选错索引导致的线上慢查询事故
前言 又和大家见面了!又两周过去了,我的云笔记里又多了几篇写了一半的文章草稿.有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有.羡慕很多大佬们,一周能产出五六篇文章, ...
- 星屑幻想 optimal mark
LINK :SP839 星屑幻想 取自 OJ 的名称 小事情...题目大意还是要说的这道题比较有意思,想了一段时间. 给你一张图 这张图给答案带来的贡献是每条边上两个点值得异或 一些点的值已经被确定 ...