第十六次CCF认证模拟试题(201903-2):二十四点(Java完整版)

2023-11-19

最近在练习算法,觉得CCF的算法题都还不错,就做了一下子。

  1. 试卷原题

二十四点原题

  1. Java版解法
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //nextInt取循环的次数
        int n = 0;
        n = in.nextInt();
        //这里必须要有一行in.nextLine();,将输入的n数量和实际的计算式隔开
        in.nextLine();
        String result[] = new String[n];
        //循环N此
        for (int i = 0; i < n; i++) {
            //取输入的一行字符串
            String s = in.nextLine();
            ArrayList<String> list = new ArrayList<>();
            //将这一行字符串的各个字符分割开来
            for (int j = 0; j < 7; j++) {
                list.add(s.substring(j,j+1));
            }
            result[i] = dealList(list);
        }
        for (int i = 0; i < n; i++) {
            System.out.println(result[i]);
        }
    }

    //递归处理List的值
    private static String dealList(ArrayList<String> list) {
        String result = "";

        //当list中只剩下最后一个字符串运算时
        if (list.size() == 3){
            int num =  deal(list.get(0),list.get(1),list.get(2));
            if (num == 24){
                result = "Yes";
            }else {
                result = "No";
            }
            return result;
        }

        //遍历这个list
        for (int i = 0; i < list.size(); i++) {
            //一进来,直接先遍历一边字符串,将其中的由x和/的优先计算
            //当list.get(i)取得的字符是X和/时,需要进行优先计算
            //例如3+4x5+6,当i取得到x的时候,需要先算4x5
            //同时将i为x的值换成4x5=20的值,将原数组中的4和5去掉
           if (list.get(i).equals("x") || list.get(i).equals("/")){
                int dealNum = deal(list.get(i-1),list.get(i),list.get(i+1));
                list.set(i, String.valueOf(dealNum));
                //记住这里一定要先remove后面的值,再remove前面的值
                list.remove(i+1);
                list.remove(i-1);
                //递归调用dealList进行处理,直到list的size为3
                return dealList(list);
           }
        }
        //当字符串中没有x和/的时候,先算第一个计算式
        int dealNum = deal(list.get(0),list.get(1),list.get(2));
        list.set(1,String.valueOf(dealNum));
        //记住这里一定要先remove后面的值,再remove前面的值
        list.remove(2);
        list.remove(0);
        return dealList(list);
    }

    /**
     * 处理一个s和s2的运算,例如s+s2
     * @param s
     * @param s1
     * @param s2
     * @return
     */
    private static int deal(String s, String s1, String s2) {
        //取出两个数字
        int a = Integer.parseInt(s);
        int b = Integer.parseInt(s2);
        if (s1.equals("+")){
            return a+b;
        }else if (s1.equals("-")){
            return a-b;
        }else if (s1.equals("x")){
            return a*b;
        }else {
            return a/b;
        }
    }
}

PS:注意在输入的时候,一定要严格按照题目要求的格式,在所有的数据全部处理完毕后,一行一行输出结果,否则就会报错。

好啦,祝大家学习愉快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第十六次CCF认证模拟试题(201903-2):二十四点(Java完整版) 的相关文章

随机推荐

  • C++ 数据类型

    使用编程语言进行编程时 需要用到各种变量来存储各种信息 变量保留的是它所存储的值的内存位置 这意味着 当创建一个变量时 就会在内存中保留一些空间 可能需要存储各种数据类型 比如字符型 宽字符型 整型 浮点型 双浮点型 布尔型等 的信息 操作
  • AI绘图实战(六):制作一张庆祝五一劳动节的海报

    S AI能取代设计师么 I 至少在设计行业 目前AI扮演的主要角色还是超级工具 要顶替 除非甲方对设计效果无所畏惧 预先学习 安装及其问题解决参考 Windows安装Stable Diffusion WebUI及问题解决记录 运行使用时问题
  • JUMPSERVER+ZABBIX二次开发

    未完待续 1 apps assets models assets py 添加字段 zabbix group id models IntegerField null True blank True verbose name Zabbix Gr
  • Rust对文件的操作

    一 文件IO操作 在类unix系统中 一切都是文件 所以说广义的文件操作 其实包括很多 Socket 管道 内存映射等等 其实文件操作无论怎么变化 主流仍然是对外设的访问 计算机本身的组成 是一系列的硬件整合在一起的 单纯的只有CPU和内存
  • WSL 2是什么

    Windows Subsystem for Linux WSL 适用于 Linux 的 Windows 子系统是微软在Windows 10上提供的一项供用户快速运行Linux命令和工具的功能 相比前一代的WSL WSL 2提供更全的兼容性
  • 【vue2】vue2中引入jquery

    文章目录 安装 main js中引用 修改webpack配置 把以下三步做好 就不会出现 jquery is not define 的问题了 安装 npm i jquery S main js中引用 import from jquery V
  • 918. 环形子数组的最大和

    918 环形子数组的最大和 难度中等192 给定一个由整数数组 A 表示的环形数组 C 求 C 的非空子数组的最大可能和 在此处 环形数组意味着数组的末端将会与开头相连呈环状 形式上 当0 lt i lt A length 时 C i A
  • Docker安装RabbitMQ docker安装RabbitMQ完整详细教程

    Docker安装RabbitMQ docker安装RabbitMQ完整详细教程 Docker 上安装 RabbitMQ 3 12 的步骤 选择要安装的RabbitMQ 版本 1 拉取 RabbitMQ 镜像 2 创建并运行容器 3 Rabb
  • H5移动端便捷兼容测试方式

    一 准备 1 谷歌浏览器 2 H链接 3 主流设备分辨率 尺寸 二 步骤 1 打开F12 选择手机模式 2 看顶部设备信息 点击 县级弹窗最底部的edit进入编辑模式 3 添加想要测试的设备 设备的宽高需要按照手机的分辨率和像素值计算 以i
  • Oracle的三种高可用集群方案

    转载自 http www cnblogs com baiboy p orc2 html label1 Oracle的三种高可用集群方案 1 RAC Real Application Clusters 多个Oracle服务器组成一个共享的Ca
  • Java 基本数据类型之间的运算规则

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 前言 这里只讨论七种基本数据类型变量间的运算 不包含boolean类型的 1 自动类型提升 结论 当容量小的数据类型的变量与容量大的数据
  • 水果识别系统-tensorflow项目

    介绍 水果识别系统 可识别15种水果 人工智能 机器学习 模式识别项目 编程语言Python 基于tensorflow机器学习库通过卷积神经网络对数据集进行训练 经过多次迭代训练得到模型 预测精度达到99 技术栈 python tensor
  • Spring AOP、拦截器、过滤器的区别

    一 区别与概念 Filter过滤器 拦截web访问url地址 Interceptor拦截器 拦截以 action结尾的url 拦截Action的访问 Spring AOP拦截器 只能拦截Spring管理Bean的访问 业务层Service
  • 解决dataframe格式表格的合并

    这几天遇到了一个关于表格合并的问题 其实问题很简单 对于两个表格df1和df2 取出df1的每一行特征和df2的每一行的特征合并 再将label合并 但是看了很多pandas关于表的合并 其并不适用到我这个问题 所以在此我想简单的总结一下关
  • 使用虚拟机安装ikuai软路由系统,搭建pppoe拨号服务器

    搭建pppoe拨号服务器 一 搭建ikuai软路由系统 1 VMware版本 2 ikuai官网上下载系统镜像 3 使用虚拟机安装ikuai系统 4 登录ikuai管理界面 二 安装win7虚拟机验证拨号功能 三 其他电脑要使用这个pppo
  • 【解决】使用IDEA创建springboot项目时,出现错误Cannot download ‘https://start.spring.io‘: connect timed out

    第一步创建项目 create New Project 第二步 错误的意思为 初始化失败 https start spring io 请检查URL 网络和代理设置 错误消息 无法下载 https start spring io 连接超时 解决
  • java数据迁移程序

    环境 mysql 目标 亿级数据迁移 最终耗时 1 2小时 服务器更佳 建议在晚上或者没人访问的情况下操作 思路 1 不能一下将所有数据 导入到目标数据表 耗时太久 且占用资源 所有就用程序批量执行 每次执行一个范围段 比如第一个线程 1
  • stm32局部变量定义过大导致栈溢出

    我在stm32做归一化以及自相关的项目时 一开始直接定义了长度为8192的数组 进行自相关 单片机一直没有反应 上位机不输出信息 然后我把点数改为128后就能正常输出了 并且在调试后 我发现最高能运行的点数是512 经过上网查询我终于发现了
  • 容器适配器 -------------- stack 、queue、priority_queue的使用以及 为什么默认使用deque作为底层容器?

    什么是适配器 适配器是一种设计模式 设计模式是一套被反复使用的 多数人知晓的 经过分类编目的 代码设计经验的总结 该种模式是将一个类的接口转换成客户希望的另外一个接口 1 为什么将stack queue和priority queue称作为容
  • 第十六次CCF认证模拟试题(201903-2):二十四点(Java完整版)

    最近在练习算法 觉得CCF的算法题都还不错 就做了一下子 试卷原题 Java版解法 import java util ArrayList import java util Scanner public class Main public s