算法设计与分析基础 习题1.1 4
设计一个[√n]的算法,n是任意正整数。除了赋值和比较运算,该算法只能用到基本的四则运算。
代码实现:
#include "iostream"
using namespace std;
double n;
double x;
int main(){
cin>>n;
double head=0,tail=n;
x=n/2;
if(x*x-n>=0)tail=x;
else if(x*x-n<=0)head=x;
while(tail-head>0.000001)
{
x=head+(tail-head)/2;
if(x*x-n>=0)tail=x;
else if(x*x-n<=0)head=x;
}
cout<<x<<endl;
}
前设·题目并没有限定精确度,这里默认0.000001。
设计思路:二分法
具体算法实现:可以确定的是n必然可以作为 目标解范围的右端点,另外一端标记为0.接着根据二分法的思想一步步把目标解的范围缩小 利用f(中间点)的正负来替换目标解范围的左右端点值 经过有限次循环即可将范围限定在给定精确度内。