华硕编程竞赛11月JAVA专场 C题太空遨游 题解

news2025/7/10 4:49:18

作者主页:Designer 小郑
作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者,在校期间参加PAT乙级考试获得满分,三年ACM竞赛经验,斩获国奖两项,省奖五项。热爱技术、专注业务、开放合作、乐于分享,期待你我共同成长!
主打方向:Vue、SpringBoot、微信小程序

题目链接:题目链接

在这里插入图片描述

题面:

小王最近得到了一艘神奇的飞船,这艘飞船只有两个脚踏板,分别是油门和刹车,飞船的原始速度 N

假设飞船的现有速度为 X,每当小王踩一下油门后,就会加速到 X * X

假设飞船的现有速度为 Y,每当小王踩一下刹车后,飞船速度就会减速到 Y - 1

这并不神奇,神奇的是飞船会出一道题,如果飞船驾驶员能正确解答这道题,就可以召唤出一条神龙,实现驾驶者的一个愿望。飞船出题的内容是求出踩脚踏板后达到预定的速度 M(0 < M < 400000)的最少次数

小王特别想有一个女朋友陪他一起遨游太空,你能帮助小王解决这个问题让他召唤出神龙满足有女朋友的愿望吗?

本次挑战需要你至少了解一些 Java 中诸如流程控制、数组、集合或队列的使用。

知识点

  • 队列/背包的基本使用
  • 广度优先搜索
  • 最佳解决方案

在这里插入图片描述

初始代码

import java.util.*;

public class SpaceShip{

    public static int fly(int N,int M){
    	 int ans = 0;
         //代码编辑区 开始   
         
         
		
         //代码编辑区 结束 
         return ans;
    }

    public static void main(String[] args) {
        //测试用例
        System.out.printf("从%d 到 %d 最少需要踩:%d 次,正确答案为3次.\n",2,15,fly(2, 15));
        System.out.printf("从%d 到 %d 最少需要踩:%d 次,正确答案为5次.\n",5,21,fly(5, 21));
        System.out.printf("从%d 到 %d 最少需要踩:%d 次,正确答案为13次.\n",5,30,fly(5, 30));
        System.out.printf("从%d 到 %d 最少需要踩:%d 次,正确答案为26次.\n",5,125,fly(5, 125));
        System.out.printf("从%d 到 %d 最少需要踩:%d 次,正确答案为78次.\n",5,173010,fly(5, 173010));
        System.out.printf("从%d 到 %d 最少需要踩:%d 次,正确答案为752次.\n",11,200000,fly(11, 200000));
        System.out.printf("从%d 到 %d 最少需要踩:%d 次,正确答案为2次.\n",52,50,fly(52, 50));
    }
    
}

在这里插入图片描述

样例说明

输入初始速度 N 和目标速度 M,输出踩脚踏板的最小次数。

如初始速度 N = 2,目标速度为 15,只需依次踩油门、油门、刹车即可达到,最少只需要踩 3 次。

如初始速度 N = 52,目标速度为 50,只需依次踩刹车、刹车即可达到,最少只需要踩 2 次。

刹车与油门可以只踩一种或交替进行踩踏。

在这里插入图片描述

题解

考察 Java 队列和 bfs 的使用,当然也可以用动态规划的思想去解决问题,对于初始速度 N 和目标速度 M,需要考虑到下列三种情况。

1 初始速度 N >= 目标速度 M,答案为 N - M,因为小王只能通过踩刹车减速。

2 初始速度 N < 目标速度 M,小王可以通过踩油门或刹车控制速度,使用广搜思想分类讨论,最终得出答案。

参考代码如下:

import java.util.*;

public class SpaceShipAns{

    // 请勿修改 fly() 的方法名和参数类型
    public static int fly(int n,int m){
        int ans = 0;
        //代码编辑区 开始
        if(n >= m) {
            return n - m;
        }
        init();
        integerList.set(n,0);
        q.add(new NodeVo(0,n));
        while(q.size() > 0) {
            NodeVo vo = q.peek();
            q.poll();

            if(integerList.get(vo.getId()) < vo.getT()) {
                continue;
            }
            if(vo.getId() <= 632) {
                int index = vo.getId() * vo.getId();
                int t = vo.getT() + 1;
                if(integerList.get(index) > t) {
                    integerList.set(index,t);
                    q.add(new NodeVo(t,index));
                }
            }
            if(vo.getId() > 2) {
                int index = vo.getId() - 1;
                int t = vo.getT() + 1;
                if(integerList.get(index) > t) {
                    integerList.set(index,t);
                    q.add(new NodeVo(t,index));
                }
            }
        }
        ans = integerList.get(m);
        //代码编辑区 结束
        return ans;
    }

    public static void main(String[] args) {
        //测试用例
        System.out.printf((Objects.equals(3,fly(2, 15)) ? "【√正确】" : "【X错误】") + "从%d 到 %d 最少需要踩:%d 次,正确答案为 3 次\n",2,15,fly(2, 15));
        System.out.printf((Objects.equals(5,fly(5, 21)) ? "【√正确】" : "【X错误】") + "从%d 到 %d 最少需要踩:%d 次,正确答案为 2 次\n",5,21,fly(5, 21));
        System.out.printf((Objects.equals(13,fly(5, 30)) ? "【√正确】" : "【X错误】") + "从%d 到 %d 最少需要踩:%d 次,正确答案为 13 次\n",5,30,fly(5, 30));
        System.out.printf((Objects.equals(26,fly(5, 125)) ? "【√正确】" : "【X错误】") + "从%d 到 %d 最少需要踩:%d 次,正确答案为 26 次\n",5,125,fly(5, 125));
        System.out.printf((Objects.equals(78,fly(5, 173010)) ? "【√正确】" : "【X错误】") + "从%d 到 %d 最少需要踩:%d 次,正确答案为 78 次\n",5,173010,fly(5, 173010));
        System.out.printf((Objects.equals(752,fly(11, 200000)) ? "【√正确】" : "【X错误】") + "从%d 到 %d 最少需要踩:%d 次,正确答案为 752 次\n",11,200000,fly(11, 200000));
        System.out.printf((Objects.equals(2,fly(52, 50)) ? "【√正确】" : "【X错误】") + "从%d 到 %d 最少需要踩:%d 次,正确答案为 2 次\n",52,50,fly(52, 50));
    }

    private static List<Integer> integerList;

    private static Queue<NodeVo> q;

    private static class NodeVo implements Comparable<NodeVo>{
        private int t;
        private int id;

        public NodeVo(int t,int id) {
            this.t = t;
            this.id = id;
        }

        public int getT() {
            return t;
        }

        public void setT(int t) {
            this.t = t;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        @Override
        public int compareTo(NodeVo other) {
            return t > other.t ? 1 : 0;
        }
    }

    private static void init() {
        integerList = new ArrayList<>();
        for(int i = 0;i < 500000; i ++) {
            integerList.add(999999999);
        }
        q = new LinkedList<>();
    }
}

在这里插入图片描述

总结

要 AC 本题,必须学会基于队列的 BFS (即广度优先搜索)的算法,从而通过本题。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatGPT辣么火,你却不会注册

chatGPT 是什么&#xff1f; 一款目前超级火的 AI 对话聊天工具&#xff0c;只是不同于其他的智能聊天机器人那样&#xff0c;他非常的智能。 可以回答你的技术问题、帮你写代码、还能帮你写小说等等&#xff0c;发挥你的想象力&#xff0c;让他干点啥都行。 比如让他帮你用…

[附源码]Python计算机毕业设计SSM基于旅游服务平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

VMware使用和Linux安装Docker

一、VMware安装和配置 二、Linux安装Docker PS:记得每次配置安装新东西前先拍摄拍照&#xff0c;这样即使安装坏了&#xff0c;不需要重装虚拟机。&#xff08;吃过这个亏&#xff09; 1.Docker支持64位版本的CentOS 7和CentOS 8及更高版本&#xff0c;它要求Linux内核版本不…

Web前端大作业—— 饮食餐饮网站 咖啡网站pc端带轮播(5个页面)HTML+CSS+JavaScript 学生美食网页设计作品 学生餐饮文化网页模板

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

数据技术篇之日志采集

第2章 日志采集 1.日志采集有哪些 页面浏览日志 页面浏览日志是指当一个页面被浏览器加载呈现时采集的日志。此类日志 也是最基础的互联网日志&#xff0c;也是目前所有互联网产品的两大基本指标&#xff1a;页面浏览量&#xff08;Page View&#xff0c;PV&#xff09;和访客…

谈一谈 IPA 上传到 App Store Connect 的几种方法

谈一谈​ 1、前言​ 关于上传​ 2、Xcode​ 利用​ 3、Application Loader​ 当然&#xff0c;Xcode 这种方式&#xff0c;是需要有源代码情况下&#xff0c;才能上传。所以&#xff0c;就会有没有源代码的情况&#xff0c;怎么上传的情况啦&#xff01;​ Application L…

ET框架解读其一

ECS&#xff1f; 真正的ECS属于是entity-component-system组件里面只有数据没有方法&#xff0c;system里面是针对组件的方法&#xff0c;system通过查找只需要关注自己想关注的组件集合就可以。但是ET框架的代码在组件里面写满了方法&#xff0c;有数据又有方法的组件&#x…

Spire.Doc for Java 10.12.2 update Word to PDF/HTML to Word

谷歌找破解版Spire.Doc for Java is a professional Word API that empowers Java applications to create, convert, manipulate and print Word documents without dependency on Microsoft Word. By using this multifunctional library, developers are able to process co…

并发编程概述 和 并行编程(Parallel Framework)

任务&#xff08;task&#xff09; 异步编程&#xff08;async&await&#xff09; 并发编程概述 前言 说实话&#xff0c;在我软件开发的头两年几乎不考虑并发编程&#xff0c;请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天&#xff08;剩下时间各种…

HPPH-SiO2 NPs/PEG/DSPE光克洛修饰介孔二氧化硅纳米粒子/聚乙二醇/磷脂的研究

小编这里分享的科研知识是HPPH-SiO2 NPs/PEG/DSPE光克洛修饰介孔二氧化硅纳米粒子/聚乙二醇/磷脂的研究&#xff0c;来看&#xff01; 光克洛修饰介孔二氧化硅纳米粒子的研究&#xff1a; 光敏剂的研发历经以卟吩姆钠为代表的第一代卟啉类光敏剂到以维替泊芬,他拉泊芬和替莫泊芬…

揭秘!女程序员为啥更赚钱?这4个大招,用Python做副业躺赚

关于穷&#xff0c;去年有了一个更学术的说法&#xff1a;隐形贫困人口。 就是因为有太多“种草达人”&#xff0c;让我们为了物质生活超前消费&#xff0c;再加上不理财的话&#xff0c;那简直是雪上加霜。 看到知乎上面最近有一个很火的问题&#xff1a; “90后的你&#…

为了学会更多炫酷的 canvas 效果,我熬夜复习了三角函数相关的知识点

稳定性建设之JavaScript代码不能被阻断 背景 js代码可能会因为某些原因&#xff0c;导致出错&#xff0c;进而整个后续代码有可能都被阻断。直接影响线上的稳定性 最常见的js被阻断的情况 console.log(111) // 预期 a {} // 结果 a undefined a.a 1 console.log(222) // …

web前端期末大作业 HTML游戏资讯网页设计制作 简单静态HTML网页作品 DW游戏资讯网页作业成品 游戏网站模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

CTO职位刚发布,一天收到100+份简历

IT行业卷可是没有想到这么卷&#xff0c;我们公司最近招聘CTO&#xff0c;一天收到100份简历&#xff0c;这里面有太多优秀的人&#xff0c;简直挑花了眼。这里面有英国毕业的&#xff0c;有北京大学的&#xff0c;还有各种985和211毕业的大学生&#xff0c;简历也是非常的丰富…

总结717

大三上半学期过去了。回想起当初那个暑假还在纠结的问题。如今&#xff0c;我也算是想通了。 回想起这样一个夜晚&#xff0c;我与好几位同学在谈论考研的事情。其中有一位同学问&#xff1a;“所以&#xff0c;你们为什么要考研呢&#xff1f;”有的同学说是“想到名校走走”…

【C++常用容器】STL基础语法学习stack容器

目录 ●stack基本概念 ●stack常用接口 ●构造函数 ●赋值操作 ●数据存取 ●大小操作 ●stack基本概念 简要介绍&#xff1a; stack是一种先进后出或后进先出的数据结构&#xff0c;它只有一个出口。栈中只有顶端元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为。栈…

对vue的mixin的理解,有什么应用场景?

mixin是什么 Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。 其他类可以访问mixin类的方法而不必成为其子类 当一段代码非常相似的时候就可以抽离成一个mixin mixins是一个js对象&#xff0c;它可以包含我们组件中script项中的任意功能选项&#xff0c;…

不是所有国产软件都像360一样流氓!这些良心国产软件不该被埋没

提到国产软件&#xff0c;很多人第一反应——360安全卫士。 但就像那句著名点评&#xff1a;“电脑上的常见问题有一半是安装360可以解决的&#xff0c;另一半是卸载360可以解决的。” 360可以说让人又爱又恨&#xff0c;强大的杀毒能力毋庸置疑&#xff0c;但是捆绑安装也是…

java计算机毕业设计基于安卓Android的学生个人支出管理APP

项目介绍 基于APP的学生个人支出管理系统主要针对广大学生,本设计分为用户客户端和管理员后台管理,前台用户管理使用Android Studio制作,使用了JS、HTML和uniapp开发框架,后台管理使用JAVA&#xff1a;MySQL数据库来保存数据以及上传数据。MySQL体积小、速度快,为数据的存储和…

用Python机器人监听微信群聊, 我看谁这么大的胆子敢调侃老板和前台小姐姐!

随着微信社交的兴起&#xff0c;我们加入的群也越来越多&#xff0c;一个不经意就被拉入好几个群&#xff0c;群是大家协同交流的平台&#xff0c;但是微信群却越来越泛滥&#xff0c;不知道大家有没有统计过自己浪费在毫无营养的群中的时间&#xff1f; 因为群质量太低或者群太…