184-求x的平方根(两种实现方法)
题目如下:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去
解题方法1
使用朴素的二分解法,即可解决问题
#include<stdio.h>
int mySqrt(int x)
{if (x < 2){return x;}int left = 1; int right = x / 2; while (left <= right){int mid = (left + right) / 2;if (x / mid > mid){left = mid + 1;}else if (x / mid < mid){right = mid - 1;}else{return mid;}}return right;
}int main()
{printf("%d\n",mySqrt(8));printf("%d\n",mySqrt(4));printf("%d\n",mySqrt(16));return 0;
}
运行截图如下:
解题方法2
牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
产生背景:
多数方程不存在求根公式,因此求精确根非常困难,甚至不可解,从而寻找方程的近似根就显得特别重要。方法使用函数 的泰勒级数的前面几项来寻找方程 的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。
#include<stdio.h>int s;//定义全局变量s
double sqrts(double x)
{double res = (x + s / x) / 2;if (res == x){return x;}else{return sqrts(res);}
}int mySqrt(int x)
{s = x;if (x == 0)return 0;return ((int)(sqrts(x)));
}int main()
{printf("%d\n",mySqrt(8));printf("%d\n",mySqrt(4));printf("%d\n",mySqrt(16));return 0;
}
运行截图如下:
184-求x的平方根(两种实现方法)相关推荐
- matlab 求矩阵秩,求矩阵秩的两种方法及MATLAB的应用
摘 要: 高等代数是一门逻辑思维比较强和理论知识比较深的学科, 它具有丰富的数学知识, 涉及许多重要的数学思想, 其在数学领域的应用很广泛, 如行列式.矩阵的相关计算和求解线性方程组的解方面的应 ...
- 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】
目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...
- 快速排序的两种实现方法(c语言版本)
经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...
- java 贪心算法思路,贪心算法之——黑白点的匹配(两种实现方法),贪心算法...
贪心算法之--黑白点的匹配(两种实现方法),贪心算法 一.题目 设平面上分布着n个白点和n个黑点,每个点用一对坐标(x, y)表示.一个黑点b=(xb,yb)支配一个白点w=(xw, yw)当且仅当x ...
- 贪心算法黑白点匹配C语言,贪心算法之——黑白点的匹配(两种实现方法)
一.题目 设平面上分布着n个白点和n个黑点,每个点用一对坐标(x, y)表示.一个黑点b=(xb,yb)支配一个白点w=(xw, yw)当且仅当xb>=xw和yb>=yw. 若黑点b支配白 ...
- R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况
R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况 目录
- mysql workbench kernelbase.dll_电脑出现kernelbase.dll错误的两种解决方法
KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...
- 使用定制的NSDictionary的方法,对NSArray进行排序(附:数组排序两种常见方法)
NSArray中存放的是NSDictionary,可以使用策略的方法对NSDictionary进行定制,增加比较的方法.然后调用NSArray的sortUsingSelector方法对数组进行排序,这 ...
- Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同:
Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同: 1. 相同点: a) 都是使用异步提交的方式: b) 默认都是使用POST方式来提交数据 ...
最新文章
- Python内置函数(63)——super
- 面向非易失性内存的持久索引数据结构研究综述
- js动态改变iframe的src属性
- 类库、委托、is/as
- Google手机移动网站适配(双向注释)
- Intersection of Two Prisms(AOJ 1313)
- go srs 流媒体服务器_SRS-开源流媒体服务器
- 前台收银系统授权服务器未开启,佳为软件操作大全 佳为收银系统
- jQuery——常用API
- 硬件工程师物料清单BOM对比工具
- 【数字信号处理】划重点
- 创新检查技术,赋能保密监管 ,您需要一款这样的数据库内容保密检查系统!
- 姚舜:成年人的崩溃,“我只是想哭一下”
- powerdesigner16 license key过期问题
- Chromedriver适用谷歌浏览器的各个版本
- ui设计现状与意义_UI设计的现状如何?
- 小球间完全弹性斜碰(赋Python代码)
- 数据分析师8大经典问题
- 向服务器写入文件失败,向远程服务器写入文件
- OGG dblogin错误Unrecognized parameter (SOURCEDB), expected USERID.