热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

2-08.用扑克牌计算24点(25)(ZJU_PAT数学枚举)

题目链接:http:pat.zju.edu.cncontestsds2-08一副扑克牌的每张牌表示一个数(J、Q、K分别表示11、12、13,两个司令都表示6)。

题目链接:http://pat.zju.edu.cn/contests/ds/2-08


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

每一个数仅仅能參与一次运算。4个数顺序能够随意组合,4个运算符随意取3个且能够反复取。运算遵从一定优先级别,可加括号控制。终于使运算结果为24。请输出一种解决方式的表达式,用括号表示运算优先。假设没有一种解决方式,则输出-1表示无解。

输入格式说明:

输入在一行中给出4个整数,每一个整数取值在[1, 13]。

输出格式说明:

输出一种解决方式的表达式,用括号表示运算优先。假设没有解决方式。请输出-1。

例子输入与输出:

序号 输入 输出
1
2 3 12 12
((3-2)*12)+12
2
5 5 5 5
(5*5)-(5/5)
3
1 3 5 6
(1+(3*6))+5
4
8 13 9 4
8+((13-9)*4)
5
2 13 7 7
2*(13-(7/7))
6
5 5 5 2
-1

PS:

此题思路:http://blog.sina.com.cn/s/blog_81727a7f01017e9a.html


暴力枚举每次所选的数字和运算符的五种不同运算姿势!


代码例如以下:

#include 

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;
}



推荐阅读
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
author-avatar
可卡因
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有