题目链接: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):的更多相关文章

  1. 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~ ...

  2. PAT_2-08. 用扑克牌计算24点

    一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌,即得到4个1~13的数,请添加运算符 (规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式.每个数 ...

  3. C语言-纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...

  4. ZT ---- 给孩子的信(孩子写给爸爸妈妈的信在24、25、26楼)

    胡同口 > 情感 > 婚后空间 > 给孩子的信(孩子写给爸爸妈妈的信在24.25.26楼) 给孩子的信(孩子写给爸爸妈妈的信在24.25.26楼)分享: 腾讯微博 新浪微博 QQ空间 ...

  5. Web安全测试周末公开班计划5月24、25日开课,欢迎报名参加!

    Web安全测试周末公开班计划5月24.25日开课,欢迎报名参加! 课程大纲参考: http://gdtesting.com/product.php?id=107 报名咨询: 黎小姐 QQ:241448 ...

  6. 【Python】我是如何使计算时间提速25.6倍的

    我是如何使计算时间提速25.6倍的 我的原始文档:https://www.yuque.com/lart/blog/aemqfz 在显著性目标检测任务中有个重要的评价指标, E-measure, 需要使 ...

  7. 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 ...

  8. 计算 24 点是一种扑克牌益智游戏,随机抽出 4 张扑克牌,通过加 (+) ,减 (-) ,乘 ( * ), 除 (/) 四种运算法则计算得到整数 24 ,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写 joker 表示小王,大写 JOKER 表示大王:

    include "stdafx.h" #include <iostream> #include <fstream> #include <string& ...

  9. [HDU 1427]速度计算24点(DFS暴力搜索)

    主题连接:  pid=1427">http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表 ...

随机推荐

  1. vue学习(七) v-model 双向数据绑定

    //html <div id="app"> <input type="text"v-model="msg" style=& ...

  2. Go语言基础语法总结

    1. 认识HelloWorld 在前面的<Go的安装和使用>这篇文章中已经写过HelloWorld.go了,现在就来逐行认识一下它. package main import "f ...

  3. MySQL(四)数据备份与还原

    数据备份与还原: 备份:将当前已有的数据或者记录保留 还原:将已经保留的数据恢复到对应的表中 为什么要做备份还原: 1.防止数据丢失:被盗.误操作 2.保护数据的记录 数据备份还原的方式很多:数据表备 ...

  4. HTML骨架

    本文只是复习HTML笔记 html 骨架: DTD:文档类型定义,规定了使用哪个版本的html规范 html 标签:双标签,表示整个网页 head 标签: 配置HTML页面 title: 网页标题 m ...

  5. 自动化不知如何参数化(二)?xlrd来帮你解决

    在昨天的博文中介绍了普通单元格数据的获取,以及单元格数据类型的转换,详细见博文:自动化不知如何参数化(一)?xlrd来帮你解决. 昨天的那篇博文中,还有个获取合并单元格数据的问题没解决,今天就专门来讲 ...

  6. 感性认识JWT

    常见的认证机制 今天我么聊一聊JWT. 关于JWT,相信很多人都已经看过用过,他是基于json数据结构的认证规范,简单的说就是验证用户登没登陆的玩意.这时候你可能回想,哎哟,不是又那个session么 ...

  7. Numpy创建数组

    # 导入numpy 并赋予别名 np import numpy as np # 创建数组的常用的几种方式(列表,元组,range,arange,linspace(创建的是等差数组),zeros(全为 ...

  8. PHP hex2bin() 函数

    实例 把十六进制值转换为 ASCII 字符: <?phpecho hex2bin("48656c6c6f20576f726c6421");?> 以上实例输出结果: He ...

  9. CF453A Little Pony and Expected Maximum 期望dp

    LINK:Little Pony and Expected Maximum 容易设出状态f[i][j]表示前i次最大值为j的概率. 转移很显然 不过复杂度很高. 考虑优化.考虑直接求出最大值为j的概率 ...

  10. angular2+ 组件间通信

    angular2+ 不同于react的redux,vue的vuex,angular2+其实可实现数据状态管理的方法很多,以下方案一般也足够支撑普通业务: 父子组件通信 1.1 父组件向子组件传递信息( ...