DS查找——折半查找求平方根

Description

假定输入y是整数,我们用折半查找来找这个平方根。在从0y之间必定有一个取值是y的平方根,如果我们查找的数xy的平方根小,则x^2<y,如果我们查找的数xy的平方根大,则x^2>y,我们可以据此缩小查找范围,当我们查找的数足够准确时(比如满足|x2-y|<0.00001),就可以认为找到了y的平方根。

比如求5的平方根x,则x一定满足 0<=x<=5,取x(5+0)/2=2.5,因为2.5的平方为6.25>5,所以x一定小于2.5,也即x满足0<=x<=2.5,取x1.25,以此类推

X的范围X的取值x2x2-y
052.56.251.25
02.51.251.5625-3.4375
1.252.51.8753.515625-1.484375
1.8752.52.18754.78515625-0.21484375
2.18752.52.343755.4931640630.493164063
2.18752.343752.2656255.1330566410.133056641
2.18752.2656252.2265625

最后求得5的平方根为2.236

温馨提示: 计算过程中为确保精确性,计算变量的类型都用double

保留小数位数请采用printf("%.3f\n",x) 的格式输出或cout<<fixed<<setprecision(3)<<x<<endl;

程序框架参考平时练习中折半查找的方法

Input

第 1 行输入一个整数n < 100,表示有n个数

从第 2 行起到第n+1行输入n个整数

Output

输出n个数的平方根,精确到小数点后三位。

Sample

#0
Input

Copy

2
13
5
Output

Copy

3.606
2.236

tips:有小数点限制位数的我个人都喜欢用printf

思路:

       还是用二分法逐渐逼近,但是结束的条件是给出的要求保留精度:比如满足|x^2-y|<0.00001
所以结束循环条件是abs(x^x-y)<0.00001

       还有本题跟之前的有一点区别,本题是二分答案,就是我们的mid,就是我们要得到的答案,mid满足一定条件下退出循环

       左边界left=0,有边界right=n,mid=(left+right)/2,如果mid满足条件,就退出循环。如果mid不满足条件且mid*mid<n,那就说明小了,left左边界就右移动到mid此时的位置。相反如果大了就right左移到mid的位置
       所以退出的条件是abs(mid*mid-n)<0.00001

    

主要代码:

全部代码:

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        double left = 0, right = n;
        double mid = (left + right) / 2;//因为不想然mid为空值所以先除了一遍
        //本题用的是二分答案,mid就是我们最后得出的根号n
        while (abs(mid * mid - n) >= 0.00001)//abs(mid * mid - n) < 0.00001是退出的条件,
        {                                    //不满足条件就进入循环所以是>=
            mid = (left + right) / 2;
            if (mid * mid < n)
            {
                left = mid;//说明mid就是我们的根号n的平方<n,所以左边界向右移动
            }
            else
            {
                right = mid;说明mid就是我们的根号n的平方>=n,所以右边界向左移动
            }
        }
        printf("%.3f\n", mid);//输出mid,mid就是我们要得到的根号n
    }
    return 0;
}

肯定有人觉得我在水文章。
就水就水就水,你管我!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

看图识药,python开发实现基于VisionTransformer的119种中草药图像识别系统

中药药材图像识别相关的实践在前面的系列博文中已经有了相应的实践了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff0c;每篇文章的侧重点不同&#xff1a; 《python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统》 《基于轻量级MnasNet模型开发构建40种常…

Day58力扣打卡

打卡记录 下一个更大元素 IV&#xff08;单调栈 x2&#xff09; 链接 class Solution:def secondGreaterElement(self, nums: List[int]) -> List[int]:ans [-1] * len(nums)s []t []for i, x in enumerate(nums):while t and nums[t[-1]] < x:ans[t.pop()] x # t…

CSS的三大特性(层叠性、继承性、优先级---------很重要)

CSS 有三个非常重要的三个特性&#xff1a;层叠性、继承性、优先级。 层叠性 场景&#xff1a;相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要解决样式冲突 的问题 原则&#xff1a;  样式冲突&am…

nodejs微信小程序+python+PHP的外卖数据分析-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Ubuntu编译文件安装SNMP服务

net-snmp源码下载 http://www.net-snmp.org/download.html 编译步骤 指定参数编译 ./configure --prefix/root/snmpd --with-default-snmp-version"2" --with-logfile"/var/log/snmpd.log" --with-persistent-directory"/var/net-snmp" --wi…

应用程序映射的 5 个安全优势

现代企业依靠无数的软件应用程序来执行日常运营。这些应用程序相互连接并协同工作以提供所需的服务。了解这些应用程序如何相互交互以及底层基础设施对于任何组织都至关重要。这就是应用程序映射概念的用武之地。 顾名思义&#xff0c;应用程序映射是创建应用程序架构&#xf…

[NAND Flash 3.2] 3D NAND 工艺与发展前沿

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解NAND Flash》 全文 6200 字&#xff0c;​2023.12.12 更新 1. 导论 1.1 何为 3D NAND? 3D NAND, 也叫做 Sumsung V-NAND, 是一种高密度闪存。 以前&#xff0c;把NAND闪存颗粒&#xff0c;直接…

互斥锁的原理

互斥锁&#xff08;Mutex&#xff0c;全称Mutual Exclusion&#xff09;是一种同步机制&#xff0c;用于确保在任意时刻&#xff0c;只有一个线程可以访问共享资源&#xff0c;从而防止数据竞争和不一致性。互斥锁的基本思想是在进入临界区之前&#xff0c;先获取锁&#xff1b…

Python和Beautiful Soup爬虫助力提取文本内容

大家好&#xff0c;网络爬虫是一项非常抢手的技能&#xff0c;收集、分析和清洗数据是数据科学项目中最重要的部分。今天介绍如何从链接中爬取高质量文本内容&#xff0c;我们使用迭代&#xff0c;从大约700个链接中进行网络爬取。如果想直接跳转到代码部分&#xff0c;可以在下…

【JVM从入门到实战】(四)类的生命周期

什么是类的生命周期 类的生命周期描述了一个类加载、连接、初始化、使用、卸载的整个过程 一个类完整的生命周期如下&#xff1a; 加载阶段 加载阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道…

计算机视觉 基于视频识别场景了解GluonCV深度学习工具包

一、简述 GluonCV 提供计算机视觉领域最先进 (SOTA) 深度学习算法的实现。它旨在帮助工程师、研究人员和学生快速制作产品原型、验证新想法并学习计算机视觉。 GluonCV: a Deep Learning Toolkit for Computer Vision — gluoncv 0.11.0 documentationhttps://cv.gluon.ai/con…

FFmpeg的AVIOPROBE

文章目录 定义 可能你一直有疑问&#xff0c;ffmpeg的avformat是怎么提前知道码流是编码格式或者容器&#xff1f;恭喜你&#xff0c;看到这里&#xff0c;你找到答案了&#xff0c;在这里&#xff0c;ffmpeg通过这些probe函数来提前获取码流的编码格式。 看到下面的avs2_prob…

单变量线性回归的机器学习代码

本文为学习吴恩达版本机器学习教程的代码整理&#xff0c;使用的数据集为https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/f2757f85b99a2b800f4c2e3e9ea967d9e17dfbd8/code/ex1-linear%20regression/ex1data1.txt 将数据集和py代码放到同一目录中&#xff0c;使…

多阶段构建:精妙优化Docker镜像大小和性能

在容器化应用的世界中&#xff0c;Docker镜像大小和性能优化是至关重要的。多阶段构建是一项强大的技术&#xff0c;通过精心设计Dockerfile&#xff0c;可以在构建镜像时去除不必要的组件&#xff0c;从而显著减小镜像大小&#xff0c;提高性能。本文章将深入讨论多阶段构建的…

Knowledge Graph知识图谱—9. Data Quality and Linking

9. Data Quality and Linking 9.1 How well are the linked open data in practice? Linked Open Vocabularies(LOV) project – analyze usage of vocabularies 9.2 Quality Linked Data Conformance vs. Quality Conformance: – i.e., following standards and best prac…

语音验证码可以用在哪些方面?

电商行业 由于行业竞争日渐激烈&#xff0c;大多数电商采用补贴用户的营销方式抢占市场&#xff0c;其中&#xff0c;新用户补贴较为常见&#xff0c;随之也衍生出一部分恶意刷单的人群。 而语音验证码在一定程度上保证了一个号码对应一个账号&#xff0c;大大增强了刷单难度…

分页存储管理

页框和页面 将内存空间分为一个个大小相等的分区 (比如:每个分区4KB)&#xff0c;每个分区就是一个“页框”(页框页内存块物理块物理页面)。每个页框有一个编号&#xff0c;即“页框号”(页框号页帧号内存块号物理块号物理页号)&#xff0c;页框号从0开始。 为了将各个进程的数…

JS基础源码之手写模拟new

JS基础源码之手写模拟new 手写模拟new初步实现最终实现 手写模拟new new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。 我们先看看new实现了哪些功能&#xff1a; function Person (name,age){this.name name;this.age age;this.habit Games;…

2023全国职业院校技能大赛信息安全管理与评估正式赛(模块三CTF)

全国职业院校技能大赛高等职业教育组信息安全管理与评估 \任务书\ 模块三 网络安全渗透、理论技能与职业素养 极安云科专注技能竞赛&#xff0c;包含网络建设与运维和信息安全管理与评估两大赛项&#xff0c;及各大CTF&#xff0c;基于两大赛项提供全面的系统性培训&#xf…

目标检测锚框

目标检测锚框 最开始呢&#xff0c;我们需要先介绍一下框&#xff0c;先学会一下怎么画框 导入所需要的包 from PIL import Image import d2lzh_pytorch as d2l import numpy as np import math import torch展示一下本次实验我们用到的图像&#xff0c;猫狗 d2l.set_figsiz…