AcWing算法基础课-790数的三次方根-Java题解

heweilai-bolg-title-image-of-the-article

大家好,我是何未来,本篇文章给大家讲解《AcWing算法基础课》790 题——数的三次方根。本题考查算法为浮点数二分查找。本文详细介绍了一个使用二分法计算浮点数三次方根的算法。通过逐步逼近目标值,程序能够在给定的区间内精确计算出结果,并保留 6 位小数。文章从输入处理、二分法初始化、迭代过程到输出结果,全面解析了算法的实现步骤。

文章目录

  • ❓题目描述
  • 💡算法思路
  • ✅Java代码
  • 🔗参考

❓题目描述

给定一个浮点数 n,求它的三次方根。

输入格式

共一行,包含一个浮点数 n。

输出格式

共一行,包含一个浮点数,表示问题的解。

注意,结果保留 6 位小数。

数据范围

−10000 ≤ n ≤ 10000

输入样例:

1000.00

输出样例:

10.000000

💡算法思路

  1. 对数据进行输入处理
  2. 使用二分法计算浮点数的三次方根
  3. 对结果进行输出处理

具体实现步骤:

  1. 读取输入

    • 程序首先创建一个 StreamTokenizer 对象,用于从标准输入读取数据。
    • 通过 nextDoule 方法读取一个双精度浮点数 n,这个数是我们要计算三次方根的目标值。
  2. 初始化二分法

    • 程序定义了一个 solution 方法,用于计算 n 的三次方根。
    • solution 方法中,初始化搜索区间为 [-10000, 10000],即从 -1000010000
    • 设置一个精度 esp1e-8,用于判断二分法是否达到所需精度。
  3. 二分法迭代

    • while 循环中,当区间长度 r - l 大于精度 esp 时,继续二分:
      • 计算区间的中点 mid,即 (l + r) / 2
      • 判断 mid 的立方是否大于等于 n
        • 如果是,说明 mid 的三次方根在当前中点的左侧,因此将右边界 r 移动到 mid
        • 如果不是,说明 mid 的三次方根在当前中点的右侧,因此将左边界 l 移动到 mid
    • 这个过程不断缩小搜索区间,直到区间长度小于等于精度 esp,此时 l 即为 n 的三次方根的近似值。
  4. 输出结果

    • main 方法中,调用 solution 方法计算 n 的三次方根,并使用 System.out.printf 方法输出结果,保留6位小数。

时间复杂度:O(n log n)
空间复杂度:O(n)

✅Java代码

import java.io.*;public class Aw790 {// 创建一个StreamTokenizer对象,用于读取输入流static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));// 读取下一个双精度浮点数static double nextDoule() throws IOException {in.nextToken(); // 获取下一个输入标记return in.nval; // 返回当前标记的值}static double n; // 存储输入的数值public static void main(String[] args) throws IOException {n = nextDoule(); // 读取输入的数值// 调用solution方法计算三次方根,并输出结果,保留6位小数System.out.printf("%.6f", solution(-10000, 10000, n));}// 使用二分法计算三次方根static double solution(double l, double r, double x) {final double esp = 1e-8; // 定义精度,用于判断二分法是否达到所需精度// 这里有一个小技巧,当题目要求结果精确到n位小数时,我们将精度多设置2位// 这样就能够得到精确的结果while (r - l > esp) { // 当区间长度大于精度时,继续二分double mid = (l + r) / 2; // 计算区间的中点if (mid * mid * mid >= x) { // 如果中点的立方大于等于目标值r = mid; // 将右边界移动到中点// 这里的区间缩小不需要像整数二分那么精确,只需要将区间缩小一半即可} else {l = mid; // 否则将左边界移动到中点}}return l; // 返回左边界,即三次方根的近似值}}

🔗参考

  • https://www.acwing.com/problem/content/792/

作者:程序员何未来-heweilai.com


🔍推荐阅读

  1. AcWing算法基础课-789数的范围-Java题解
  2. AcWing算法基础课-788逆序对的数量-Java题解
  3. 内容为王,推广为后:技术博客文章推广全攻略

欢迎关注我的博客:@程序员何未来,持续为你输出有价值的技术文章~
你们的点赞👍 收藏⭐ 留言🗨️ 关注✅
是我持续创作,输出优质内容的最大动力!谢谢!

文章关键词:算法,计算机算法,算法题解,算法竞赛,Java,数据结构,AcWing算法基础课

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

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

相关文章

【Elasticsearch系列廿】Logstash 学习

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

什么是Rspack?

Rspack 是一个基于 Rust 编写的高性能 JavaScript 打包工具,旨在提供与 webpack 生态系统的强兼容性,允许无缝替换 webpack,并提供极快的构建速度。 介绍 - Rspack 它由字节跳动 Web Infra 团队孵化,具有以下特点: 高…

2024年汉字小达人区级自由报名备考冲刺:最新问题和官模题练一练

2024年第十一届汉字小达人的区级活动的时间9月25-30日正式开赛,还有两天就开始比赛。 今天继续回答几个关于汉字小达人的最新问题,做几道2024年官方模拟题,帮助孩子们更精准地备考2024年汉字小达人。 【温馨提示】本专题在比赛期间持续更新…

委托的注册及注销+观察者模式

事件 委托变量如果公开出去,很不安全,外部可以随意调用 所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫…

LLM大模型训练/推理的显卡内存需求计算

无论你是从头开始训练 LLM、对其进行微调还是部署现有模型,选择合适的 GPU 对成本和效率都至关重要。在这篇博客中,我们将详细介绍使用单个和多个 GPU 以及不同的优化器和批处理大小进行 LLM 训练和推理时 GPU 要求的所有信息。 计算机处理器由多个决定…

C/C++逆向:switch语句逆向分析

在逆向分析中,switch语句会被编译器转化为不同的底层实现方式,这取决于编译器优化和具体的场景。常见的实现方式包括以下几种: ①顺序判断(if-else链): 编译器将switch语句转化为一系列的if-else语句。这…

管道物体计数系统源码分享

管道物体计数检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

信创背景下中职计算机组装与维护课程教学解决方案

在当前的国际形势下,确保信息化系统的安全性和可靠性显得尤为重要。为了提高信息技术的安全性和可靠性,国家鼓励并支持使用国产的信息技术、工具和资源来替代现有的技术体系。这一过程被称为“安全可信的创新替代”,它已经成为国家安全战略的…

VMware ESXi 8.0U3b macOS Unlocker OEM BIOS 2.7 标准版和厂商定制版

VMware ESXi 8.0U3b macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版 ESXi 8.0U3 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、NEC (日电) 定制版、Huawei (华为) OEM 定制版 请访问…

OpenResty安装及使用

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

构建高可用和高防御力的云服务架构第四部分:REDIS(4/5)

本文的目的是深入探讨Redis在构建高可用和高防御力云服务架构中的应用。我们将分析Redis的工作原理、核心特性以及如何通过Redis优化云服务架构的性能和安全性。此外,我们还将提供实际案例和最佳实践,帮助读者更好地理解和应用Redis,以构建更…

中小企业体系技术抽象沉淀-异地灾备篇

IT团队内部使用工具 系列文章:https://blog.csdn.net/caicongyang/article/details/136857045 DDL DML管控 https://github.com/hhyo/Archery/ flyway 文档编写 wiki 技术对外输出文档推荐gitbook 同城双活数据同步方案 总览: vivo 系列文章&#x…

普通程序员如何快速入门AIGC

文章目录 第1阶段:基础知识打牢 (1-2周)第2阶段:深度学习理论与实践 (2-4周)第3阶段:AIGC 生成技术入门 (3-5周)第4阶段:进阶学习和项目实战 (5-8周)第5阶段:保持学习和更新 (持续进行) 要快速入门 AIGC(AI…

SPI驱动学习六(SPI_Master驱动程序)

目录 前言一、SPI_Master驱动程序框架1. SPI传输概述1.1 数据组织方式1.2 SPI控制器数据结构 2. SPI传输函数的两种方法2.1 老方法2.2 新方法 二、如何编写SPI_Master驱动程序1. 编写设备树2. 编写驱动程序 三、SPI_Master驱动程序简单示例demo1. 使用老方法编写的SPI Master驱…

Webrtc开发实战系列 - win10+vs2022下编译最新webrtc代码

1. 准备起步 操作系统:windows 10 安装 vs2019/vs2022 安装 win10 sdk 19041 一定勾选 Debugging Tools for Windows 科学上网准备代理工具 磁盘剩余空间至少 30G 推荐用一台干净的机器或者虚拟机来编译WebRTC,安装过python的会出现一些非常棘手…

昂首资本:欧美货币对的交易智慧

在外汇市场的海洋中,昂首资本的投资者们深知,把握欧美货币对的交易时段是获取收益的关键。欧美货币对,即欧元对美元,因其在欧洲和美国市场的活跃交易时段而备受瞩目。这两个时段不仅交易量巨大,而且价格波动剧烈&#…

【隐私计算篇】利用多方安全计算MPC实现VGG16人脸识别隐私推理

1. 背景介绍 本文主要介绍一种利用多方安全计算MPC技术,实现VGG16的人脸识别模型,侧重于模型推理阶段,目前已经公开专利,因此以下内容的分享都是基于公开材料。该分享涉及到最小化多方安全计算(MPC)以及明密文混合计算的思想&…

JAVA开源项目 甘肃非物质文化网站 计算机毕业设计

本文项目编号 T 043 ,文末自助获取源码 \color{red}{T043,文末自助获取源码} T043,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

python画图|把X轴标签移动到图像顶端

在前述学习过程中,我们一直使用的是默认的轴坐标,X轴往往置于图像的下端。 有时候,也会有将X轴标签放置在图形顶端的需求,今天就一起学习一下。 【1】官网教程 首先打开官网,可以通过下述链接一步直达: …

软考高级:系统安全 -区块链特点:去中心化、开放性、自治性、安全性、匿名性

讲解 生活化例子 想象一下,你和朋友们玩一个共享账本的游戏。每个人都可以在账本上记账,没人可以单独改动账本,大家都可以随时查看账本内容,也不用再信任某个单独的人来管理账本。这就类似于区块链的工作原理。 概念讲解 去中…