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)表 ...
随机推荐
- vue中引入jq的步骤--以及注意事项
- vue学习(十九) 生命周期 了解
生命周期:从vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期 生命周期钩子:就是生命周期事件的别名而已 生命周期钩子==生命周期函数==生命周期事件 生命周期函数分类 ...
- 最近建了一个.net源码共享群,群共享有大量网友分享的.net(C#)商业源码
.net源码共享群 324087998. 本群创建于2013/6/21: 群里都是.net(C#)程序开发人员,群共享有大量网友分享的.net(C#)商业源码.比如:DTCMS旗舰版,hishop微分 ...
- MySQL 容器修改配置文件后无法启动问题(终极解决办法)
docker inspect 容器名称或容器 ID 例如: docker inspect mysql cd /var/lib/docker/overlay2/1d7877d715b9c730103e ...
- 【保姆级教学】新手第一次搭建vue项目和初始化
前端项目初始化步骤 安装vue脚手架 通过vue脚手架创建项目 配置vue路由 配置Element-UI组件库 配置axios库 初始化git远程仓库 将本地项目托管到github或者码云上 通过vu ...
- Python File close() 方法
概述 close() 方法用于关闭一个已打开的文件.高佣联盟 www.cgewang.com 关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误. close() 方法允许调用多 ...
- 实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库
本文适合需要快速了解OpenGauss基本使用和操作的单机用户,可以短时间内完成安装体验.对于企业级生产使用或者需要部署多台服务器的,不适合本文. 因为业务需要,要在鲲鹏架构里安装单机版的OpenGa ...
- 简单的 Nginx+Tomcat 配置负载均衡集群
简单 Nginx+Tomcat 配置负载均衡集群 前期准备 解压两个tomcat,修改端口号 server1:8081 server:8082 同时启动 nginx官网下载解压版nginx 创建一个简 ...
- 打开IDEA后tomcat不能用,Cannot load project of unknown project type,无法加载类或者项目
这一问题在网络中有比较统一的解决方法,我这个也是按这个方法解决的. 问题出现的前提和原因: 一个运行正常项目,我关闭后第二天打开发现tomcat不能用了. 解决方法: 我查了一下,这是一个IDEA软件 ...
- “随手记”开发记录day15
今天完成了前两天没有完成的增加“修改”功能.对于已经添加的记账记录,长按可以进行修改和删除的操作.