华为机试题107-求解立方根

2023-11-19

描述

计算一个浮点数的立方根,不使用库函数。

保留一位小数。

数据范围:∣val∣≤20

输入描述:

待求解参数,为double类型(一个实数)

输出描述:

输出参数的立方根。保留一位小数。

示例1

输入:

19.9

输出:

2.7

示例2

输入:

2.7

输出:

1.4


解题思路:

题目明确要求不能使用库函数,所以不能使用pow函数

因为题目输入的数val比较小,绝对值不大于20,且立方根保留一位小数,所以我们可以这么做:

准备工作:先判断val是正数还是负数或是0,若是0,直接打印其立方根为0就行,如果是负数,我们可以将flag置为-1(flag初始化为1),并将该负数乘-1转换成正数,按照这个正数来求立方根,最后乘flag即可,比如输入值val为-8,我们将flag由1改为-1,并将输入值val乘-1得到8,算出8的立方根为2,最后打印的时候乘flag就得到-2,如果是正数,则不用改变flag(1),求出其立方根后乘flag也不影响,那么问题的关键来了,在不调用库函数的前提下,如何求一个正数的立方根?

由于输入值val的绝对值不大于20,显然其立方根不大于3(3³为27),那么我们首先判断val(转换成正数后)的值,如果其小于1,那么其立方根的范围是在0,0.1,0.2,0.3.......1.0,我们可以求出这些立方根的立方,再求出此立方值与输入值的误差,其中误差最小的就是立方根了。同理,如果val大于1小于8,那它的立方根就是在1.0,1.1,1.2,1.3.......2.0之间的某个数,该数的立方与输入值是最接近的。

用题目的示例说明一下,如果输入值是19.9,因为其大于8(2³),所以其立方根就是2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.0中的某个数,该数的立方与19.9是最接近的,以下附上它们的立方分别与19.9的误差(负的误差已转成正的):

很显然,当数为2.7时,2.7³与19.9的误差是最小的,仅为0.217,所以它就是19.9在保留1位小数时的立方根。

以下为代码:

#include <stdio.h>
int main()
{
    double val,err[11],base,i;
    char flag,k,min_err;
    while(scanf("%lf",&val)!=EOF)
    {
        flag=1;                //flag记录输入值是正数还是负数,1表示正数,-1表示为负数
        if(val==0)
        {
            printf("0.0");
            continue;
        }
        else if(val<0)
        {
            flag=-1;        //val为负数,flag置为-1,将val转成正数,更好求其立方根
            val*=-1;
        }    
        if(val<1)
            base=0;        //val小于1,则立方根不大于1
        else if(val<8)
            base=1;        //val小于8,立方根不大于2
        else
            base=2;        //val大于等于8,小于20,立方根不大于3
        for(i=0,k=0;i<=1;i+=0.1,k++)
        {
            err[k]=val-(base+i)*(base+i)*(base+i);    //每次在base基础上加0.1,算出其立方
            if(err[k]<0)                              //与输入值val的误差,并全转换为正
                err[k]*=-1;
        }
        min_err=0;
        for(k=1;k<11;k++)
        {
            if(err[min_err]>err[k])                //找到误差最小值的下标
                min_err=k;
        }
        printf("%.1lf\n",flag*(base+min_err*0.1));    
    }
    return 0;
}

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

华为机试题107-求解立方根 的相关文章

  • 使用selenium爬取唯品会

    使用selenium爬取唯品会 1 基本步骤 2 通过程序控制浏览器下拉滚动条获取加载信息 3 完成这个爬虫程序 使用selenium爬取动态加载的网页 爬取唯品会的商品 1 基本步骤 首先 创建一个浏览器驱动driver 查看唯品会页面u
  • 我的世界服务器聊天显示坐标,我的世界端游怎么显示坐标

    手机游戏cf的VIP等级会显示在最终游戏CF上吗 H 是的 无需感谢 我的世界如何环绕 单击显示不坐吗 前提是必须有一个区域插件 用木斧对角指向两个点 住所 牛仔竞技插件 您只能绘制自己的区域 其他 无法破坏或改变您的领土 每个玩家可以拥有
  • OpenCV机器视觉-识别红绿颜色

    识别红绿颜色 识别车道线 车道线检测 使用opencv来完成一个车道线检测的案例 完成这样的案例我们需要经历哪些步骤呢 我们先来思考一下解决问题的思路 当前情况下 摄像头拍出了很多的东西 例如路边的杂草远方的山 但是在我们自动驾驶的过程中

随机推荐

  • 【华为OD机试真题】补种未成活胡杨(C&C++&java&python&JavaScript&go)100%通过率【2023(B卷)100分】

    补种未成活胡杨 题目描述 近些年来 我国防沙治沙取得显著成果 某沙漠新种植 N 棵胡杨 编号 1 N 排成一排 一个月后 有 M 棵胡杨未能成活 现可补种胡杨 K 棵 请问如何补种 只能补种 不能新种 可以得到最多的连续胡杨树 输入描述 N
  • 【Android】Android ANR产生过程与分析方法

    前言 Android ANR问题一直是比较难解决的问题 一来它比较难以复现 二来复现后也不太好分析 这篇文章梳理一下ANR产生的过程以及出现ANR拿到日志文件如何定位原因 其实关于ANR线上监控也是比较棘手的 看了这篇文章我们再去看一些AN
  • linux内存调节之CMA

    本文贴代码过头了 以后想起来再优化一下吧 目录 概述 数据结构 构建初始化 DTS CONFIG DMA CMA 页表与物理页初始化 分配器激活 分配器使用 CMA部署 实战 概述 CMA Contiguous Memory Allocat
  • 小松的STM32教程(13)—— 驱动外部内存24C02

    预备 学习目标 概述 24cxx c include 24cxx h include delay h include delay h void IIC Init void GPIO InitTypeDef GPIO InitStructur
  • 数据结构之图的两种遍历实现(C语言版)

    上一期文章分享完了图的两种遍历方式 也是两种很重要的算法 DFS和BFS 这两种算法的应用和重要性我就不多说了 内行的人懂的都懂 今天这文章重要就是来上机实现这两种算法 又由于这两种算法都可以由邻接矩阵和邻接表来表示 博主分享的代码都是上机
  • pytorch c10.dll找不到

    import torch optim as optim File D Python38 lib site packages torch init py line 135 in
  • Matlab 编辑器框与命令行框视图分开两个窗口

    之前不知道怎么弄的 将matlab编辑器视图和命令行视图变成了两个窗口 效果如下图 这样调试代码我很不适应 点了好久才发现这叫停靠 点击编辑器窗口右上角 选择停靠 就能将编辑器窗口与命令行窗口在同一界面上
  • EduCoder_web实训作业--文本层次语义元素

    第一关 A D B B 第二关 strong 重要通知 strong
  • php GD库的使用

    两大功能 自己画 对于原有图片改变 PHP中GD库的使用 PHP 不仅限于只产生 HTML 的输出 还可以创建及操作多种不同格式的图像文件 PHP提供了一些内置的图像信息函数 也可以使用GD函数库创建新图像或处理已有的图像 目前GD2库支持
  • Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别

    一 Java读取和存储文件数据流 Java读取文件 实际是将文件中的字节流转换成字符流输出到屏幕的过程 这里面涉及到两个类 InputStreamReader和OutputStreamWriter InputStreamReader 将字节
  • 人工智能-基于U^2-Net的肖像画生成算法

    算法总体是在去年提出的U 2 Net remove background 的基础上实现了人物肖像的生成 并且较好地将细节复刻了下来 论文地址 https arxiv org pdf 2005 09007 pdf GitHub项目 https
  • Opencv图像增强算法(对比度增强)-opencv

    由于项目需要 这几天找了网上一个基于opencv的图像对比度增强算法的博客 但算法发布的日期太过久远了 2012年的代码放到现在很多类和类方法已经不再适用于新版本的opencv库了 所以我花了点时间重写了一下 并加入一些个人对于算法的理解与
  • Embedded image missed after moving page to another space in Confluence

    There is a resolution https confluence atlassian com display CONFKB Resolve Missing Attachments in Confluence The issue
  • 如何用递归解决n皇后问题?

    问题描述 在n n的棋盘中摆放n个皇后 要求每个皇后不攻击 输出所有的解 输入 一个正整数n 输出 所有的解 例如 输入 4 输出 2 4 1 3 输出的第1个数的数值x表示 该皇后放在第一行的第x列 3 1 4 2 include
  • PL2303HXA自2012已停产,请联系供货商的解决办法

    一 概述 PL2303 是Prolific 公司生产的一种高度集成的接口转换器 可提供一个RS232 全双工异步串行通信装置与USB 功能接口便利连接的解决方案 PL2303具有多个历史版本 早期的版本是PL2303HX 近年有PL2303
  • 掉电无法启动数据库问题解决

    由于突然掉电 造成客户在windows平台上10 2 0 1数据库无法驱动 以下是具体解决步骤 一 定位故障问题 1 启动数据库 查看错误 SQL gt startup ora 01113 file 1 needs media recove
  • 文献管理软件工具讲解-------阿冬专栏!!!

    一 Endnote Mendeley Zotero NoteExpress 和 NoteFirst 这些文献管理软件从功能上各有特色 网上的评论文章也不少 我自己的的使用体验 如下 A 功能方面 在导入中文文献数据的准确性上 Endnote
  • Python手册

    前言 Python编程语言可以很好地协调一些看起来似乎很明显的矛盾 Python编程语言格式优雅并注重实效 简单而且功能强大 非常高层但是并不妨碍用户对底层的比特 bit 和字节 Byte 的处理 Python编程语言适合于编程新手 对Py
  • Oracle中的子程序和程序包

    存储过程的语法 CREATE OR REPLACE PROCEDURE
  • 华为机试题107-求解立方根

    描述 计算一个浮点数的立方根 不使用库函数 保留一位小数 数据范围 val 20 输入描述 待求解参数 为double类型 一个实数 输出描述 输出参数的立方根 保留一位小数 示例1 输入 19 9 输出 2 7 示例2 输入 2 7 输出